33 / 59 / 6
Регистрация: 22.01.2017
Сообщений: 640
1

Сегментация памяти

08.08.2017, 00:03. Показов 1465. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот код из википедии:
C
1
2
const char *s = "hello world";
 *(char *)s = 'H';
Меня интересует вторая строчка. Что она вообще делает. Сначала я думал что это замена синтаксического сахара s[2], в стиле *(s + 2), но явно не то.
Такой код компилятор не хавает.
C
1
2
const char * /*const*/ s = "hello world";
*(s + 2) или s[2] = 'H';
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2017, 00:03
Ответы с готовыми решениями:

Распределение памяти для выделения и освобождения блоков памяти внутри запрошенного пула
В программе малые"дыры" избегают,что нужно сделать что бы малые "дыры" не избегались.... #...

Вектор, утечка памяти, функция создания и выделение памяти
Здравствуйте. Есть проблема. функция malloc выделяет память лишь в функции CreateVector(), и при...

Сегментация памяти
Здравствуйте . Подскажите чему будет равен абсолютный адрес ? если адрес памяти равен 5:6. ...

Отладка программы. Сегментация памяти
Вот программа с недописанной логикой. Странно себе ведет. Если проследить путь, то в первом заходе...

4
874 / 535 / 175
Регистрация: 30.07.2015
Сообщений: 1,739
08.08.2017, 00:39 2
Luke0208, в первой строке вы объявляете указтель s на const char. Это значит, что вы не сможете использовать указатель s для изменения данной строки, что и приводится в данном примере. Во второй строке просто производится изменение данных на которые указывает s, что в итоге приведет к ошибке.
Вот пример
C++
1
2
int num = 39;
const int *pt = #
Хотите изменить переменную num?
C++
1
2
*pt = 20 // ошибка, так как pt указывает на const int
num = 20 // правильно, так как num не const
0
33 / 59 / 6
Регистрация: 22.01.2017
Сообщений: 640
08.08.2017, 17:23  [ТС] 3
Проблема в том что здесь компилятор ошибок не обнаруживает и возникает сегментация. Я просто первый раз вижу такую синтаксическую конструкцию, и мне интересно что она значит. Про const я знаю.
C
1
*(char *)s = 'H';
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
08.08.2017, 19:05 4
Лучший ответ Сообщение было отмечено Luke0208 как решение

Решение

Выражение (char *) s означает преобразование s к типу, стоящему в скобках. То есть к простому указателю на char (без const). Далее по этому адресу записывается новое значение, с помощью разыменования.
1
33 / 59 / 6
Регистрация: 22.01.2017
Сообщений: 640
08.08.2017, 19:15  [ТС] 5
Спасибо.
0
08.08.2017, 19:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.08.2017, 19:15
Помогаю со студенческими работами здесь

сегментация
dev ругался на system("PAUSE") изменила на getc(stdin)....итог один___---windows выдает ошибку и...

Семантическая сегментация
Здравствуйте ребята. Крик о помощи 2 недели бьющегося головой об стену. Возникла у меня мысль...

Udp и сегментация
Если так получилось, что я отправил данные по udp двумя вызовами send(). Первым вызовом я отправил...

Сегментация изображения
Помогите, пожалуйста, решить задачу. Суть задачи - есть исходное изображение и бинарное. Бинарное...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru