Разница между хранением значений в символьном указателе с malloc и без - PullRequest
0 голосов
/ 17 января 2011

У меня есть такой указатель символов

  char *ptr;

Я могу присвоить ему значения следующим образом

  *ptr='a';
  *(ptr+1)='b';

Теперь, когда я могу это сделать, зачем мне использовать malloc?

Мне просто повезло, что этот указатель не ссылается на адрес, который используется процессом? Или есть вероятность, что мои данные будут повреждены каким-то другим процессом, если я не использую 'malloc'?

1 Ответ

16 голосов
/ 17 января 2011

Мне просто повезло, что этот указатель не ссылается на адрес, который используется процессом?

Нет, вам не повезло.Если вам повезет, программа будет аварийно завершена, так что вы знаете, что у вас есть проблемы.Как написано, ваш код Неопределенное поведение .Вы записываете данные через указатель на нераспределенную память.

§ 6.5.6 / 8
Если и операнд указателя, и результат указывают на элементы одного и того же объекта массива или один послепоследний элемент объекта массива, оценка не должна вызывать переполнение; в противном случае поведение не определено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...