Не существует надежного способа определить, освобожден ли указатель, как прокомментировал Грег, освобожденная память может быть занята другими не относящимися к делу данными, и вы получите неправильный результат.
И действительно, нет стандартного способа проверить, освобожден ли указатель. При этом , glibc
имеет функции (mcheck
, mprobe
) для поиска состояния malloc указателя для проверки согласованности кучи , и одна из них - просмотр если указатель освобожден.
Однако , эти функции в основном используются только для отладки, а они не являются поточно-ориентированными . Если вы не уверены в требованиях, избегайте этих функций. Просто убедитесь, что у вас есть пары malloc
/ free
.
Пример http://ideone.com/MDJkj:
#include <stdio.h>
#include <stdlib.h>
#include <mcheck.h>
void no_op(enum mcheck_status status) {}
int main()
{
mcheck(&no_op);
void* f = malloc(4);
printf("%d (should be %d)\n", mprobe(f), MCHECK_OK);
printf("%d (should be %d)\n", mprobe(f), MCHECK_OK);
free(f);
printf("%d (should be %d)\n", mprobe(f), MCHECK_FREE);
printf("%d (should be %d)\n", mprobe(f), MCHECK_FREE);
return 0;
}