free () блоки данных в C - PullRequest
       6

free () блоки данных в C

0 голосов
/ 13 февраля 2011

Когда кто-то использует функцию free () в C, освобождает ли один указатель, освобождает ли указатели?Ослабит ли указатель на массив структур и освободит все данные, или эти другие указатели будут сломаны, оставляя память недоступной?

Спасибо

Ответы [ 2 ]

2 голосов
/ 13 февраля 2011

Функция free ничего не знает о данных, содержащихся в освобождаемом блоке. Если у вас есть указатели на другие данные в этом блоке, вы должны освободить их до того, как освободит блок. Если вы вообще не освободите их, у вас будет утечка памяти. Если вы освободите их впоследствии, у вас может быть куча коррупции.

1 голос
/ 13 февраля 2011

Нет.Освобождает только память, выделенную в соответствующем вызове для malloc / calloc.Насколько известно, содержащиеся в нем указатели могут даже не быть указателями;free не знает структуру данных, которые ему передают.Он видит только необработанный адрес памяти и поэтому не может знать, содержит ли он указатели.

Я должен добавить, что хороший способ узнать, если у вас есть утечка памяти или нет, это проверить вашу программу с valgrindинструмент memcheck .У него есть инструмент для автоматического обнаружения утечек памяти.

...