Предположим, у меня есть следующая программа:fclose() затем free()?
#include <stdio.h>
int main() {
FILE * pFile;
pFile = fopen ("myfile.txt","r");
fclose (pFile);
//This never happens: free(pFile)
return 0;
}
Я никогда не видел программу, которая делает free(pFile)
после закрытия дескриптора файла. Почему это?
Я знаю, что с fclose()
не получает указатель на pFile
, то это фактически не освобождает память указателя. У меня создалось впечатление, что указатели всегда должны освобождать свою память, если они указывают на динамически выделенную память. Почему никто не free()
указатель файла?
«Почему никто не' free() 'указатель файла?" - потому что это было бы неправильно. –
'free()' также не получает указатель на свой аргумент. –
во-первых, вы НЕ хотите, чтобы вы звонили бесплатно в таблицу дескриптора файла (где точки FILE * относятся к некоторой записи в этой таблице), во-вторых, вы вызываете только free() только указатель, который был установлен одним из malloc () семейство функций (некоторые функции, такие как dup(), используют malloc в фоновом режиме, поэтому полученный указатель должен быть свободен) – user3629249