LINUX.ORG.RU

free();


0

0

Обьясните мне пожалуйста. Если после очистки памяти функцией free() ее снова можно использовать, то это значит что она не очищается?

/////////////////////////////////// int* p; p=malloc(10); free(p);

p[0]=1024; printf("%i",p[0]); // выводит 1024 ///////////////////////////////////

Re: free();

на сколько я представляю, память не очищается, а просто освобождается

cyclon ★★★★★ ()
Ответ на: Re: free(); от cyclon

Re: free();

если надо потереть данные, то можно заполнить её нулями, перед освобождением

cyclon ★★★★★ ()

Re: free();

free() не всегда освобождает память, он просто "говорит", что данная область памя ти может быть использованна для других целей. Если аллокатор памяти выделял данную область с помощью mmap(), то free() ее освободит, а если с помощью brk(), то скорее всего free() не сможет ее освободить.

>как же ее освободить?

выделяйте через mmap(), освобождайте через munmap(), тогда при обращении к освобожденной памяти получите SIGSEGV.

mky ★★★★★ ()

Re: free();

Участок памяти пометится как свободный, и все. Вот если выделить память после фри, то такого уже не должно быть: [code]int *ptr = malloc(20); free(ptr); int *new_ptr = malloc(100); ptr[0] = 1024; printf( "%i\n", ptr[0] ); free( new_ptr ); [/code] и вообще всегда после free хорошим стилем считается ptr = 0;

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.