Рубрики

Как освободить память без использования free () в C?

Вопрос: Как освободить динамически распределить память без использования функции «free ()».

Решение: Стандартная библиотечная функция realloc () может использоваться для освобождения ранее выделенной памяти. Ниже приведено объявление функции realloc () из stdlib.h

void *realloc(void *ptr, size_t size);

Если «size» равен нулю, то вызов realloc эквивалентен «free (ptr)». И если «ptr» равно NULL, а размер не равен нулю, то вызов realloc эквивалентен «malloc (size)».

Давайте проверим на простом примере.

/ * код с утечкой памяти * /
#include <stdio.h>
#include <stdlib.h>

  

int main(void)

{

    int *ptr = (int*)malloc(10);

  

    return 0;

}

Проверьте суммарную утечку с помощью инструмента Valgrind. Он показывает утечку памяти в 10 байт, которая выделяется красным цветом.

  [narendra@ubuntu]$ valgrind –leak-check=full ./free
  ==1238== LEAK SUMMARY:
  ==1238==    definitely lost: 10 bytes in 1 blocks.
  ==1238==      possibly lost: 0 bytes in 0 blocks.
  ==1238==    still reachable: 0 bytes in 0 blocks.
  ==1238==         suppressed: 0 bytes in 0 blocks.
[narendra@ubuntu]$

Давайте изменим приведенный выше код.

#include <stdio.h>
#include <stdlib.h>

  

int main(void)

{

    int *ptr = (int*) malloc(10);

  

    / * мы вызываем realloc с размером = 0 * /

    realloc(ptr, 0);

     

  

    return 0;

}

Проверьте вывод вальгринда. Он показывает, что утечки памяти невозможны, выделен красным цветом.

  [narendra@ubuntu]$ valgrind –leak-check=full ./a.out
  ==1435== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 11 from 1)
  ==1435== malloc/free: in use at exit: 0 bytes in 0 blocks.
  ==1435== malloc/free: 1 allocs, 1 frees, 10 bytes allocated.
  ==1435== For counts of detected errors, rerun with: -v
  ==1435== All heap blocks were freed — no leaks are possible.
  [narendra@ubuntu]$

Эта статья составлена Narendra Kangralkar и рецензирована командой GeeksforGeeks. Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Как освободить память без использования free () в C?

0.00 (0%) 0 votes