Доброго времени суток многоуважаемые античатовцы. Я далеко не специалист проги на Си и хотел бы знать, может быть кто нибудь знает, что происходит. Есть код: Code: #include <stdio.h> #include <stdlib.h> int main(void){ int *num = malloc(sizeof(int)); int *test = num; *num = 50; printf("%p %d\n", num, *num); printf("%p %d\n", test, *test); free(num); printf("%p %d\n", num, *num); printf("%p %d\n", test, *test); return 0; } Целью было - проверить, можно ли работать с любой выделенной для программы памятью. Несколько дней назад я заканчивал читать K&R, выполнял данный код и получал вывод [адрес] 50 [адрес] 50 [адрес] 50 [адрес] 50 в любом случае, и вывод вполне логичный. Позавчера я начал новую книгу (Learn C the hard way). Поставил Valgrind. Ну и решил посмотреть, а законны ли такие действия с памятью, хотя компилятор и не ругается. Нет, не законны, но суть не в этом. Я не знаю, почему, но вывод без Валгринда изменился на [адрес] 50 [адрес] 50 [адрес] 0 [адрес] 0 Вот пруф https://drive.google.com/open?id=1vyEn3RuKLetOpLW99PvFHTgfIZ5hxixT Вывод под Валгриндом - как и раньше, но без него - такой вот странный. Почему это происходит ?
Valgrind никогда не пробовал но судя по описанию он отлавливает такие баги и твой free либо вообще не работает - либо он перенесен куда-то в конец - либо указатель он таки удаляет но память не затирает каким-то боком - либо у него вообще там свой менеджер памяти с блекджеком и шлюхами и твои вызовы malloc и free он отрабатывает сам. Когда ты пишешь free (num) - ты освобождаешь память занятую malloc'ом и больше ей пользоваться не должен ибо в зависимости от расположения планет может быть такое что у тебя кодес работает а у твоего соседа уже нет. Не знаю что там делает с этим Valgrind, но лучше-бы писать без него. А его подключать разве что если у тебя большой проект, сдать надо завтра а оно чото "глючит и все портит". Можно тогда его присобачить и посмотреть что будет. Глюки пропали - можно отдать а потом уже имея время спокойно фиксить. Оставлять такие вундервафли не очень хорошо и не безопасно. =================== UPD: оу. Да он еще и под Линух. Тогда от погоды может зависеть очень многое. Причина: так пейсать нельзя и нет ничего логичного в первом случае. Память ты освободил а потом из нее читаешь. Это как если тебе продадут дом, но будут постоянно заходить в гости, будут делать там что хотят и бухтеть если ты им мешаешь