Память нераспределенной переменной указателя работает. Как? - PullRequest
0 голосов
/ 03 января 2019

Я написал этот код и ожидал, что он потерпит неудачу, так как я не выделяю память для переменной-указателя. К моему удивлению, это не вызвало никакой ошибки. Какова причина?

И если я просто случайно удаляю 2-й LOC, это вызывает ошибку сегментации. Как объяснить это, на первый взгляд, странное поведение?

uint16_t *c; 
uint8_t *d;
*c = 1;
printf("%x:%x",c,*c); 

1 Ответ

0 голосов
/ 03 января 2019

Как уже отмечали другие, это UB. Ваше наблюдение за кодом, «работающим» в том смысле, что оно не вызывает segfault или подобного, является более или менее случайным. Ваше распределение другой переменной в стеке может измениться , где ваш указатель c выделен, и, таким образом, он может иметь другое (случайное) место, на которое он указывает. (Или, иначе говоря, его начальное случайное значение будет или может быть другим).

Наблюдаемое различное поведение программы в зависимости от того, где и какие (независимые) объекты размещены внутри функции, является полной ошибкой в ​​том, что с функцией выделения памяти в функции что-то не так.

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