我想检查一个指针是否已经释放了。我如何使用gnu编译器集来做这件事?
发布于 2011-11-29 03:03:39
你不能。跟踪它的方法是在释放指针后将它赋值给0
或NULL
。然而,正如Fred Larson所提到的,这对指向同一位置的其他指针没有任何作用。
int* ptr = (int*)malloc(sizeof(int));
free(ptr);
ptr = NULL;
发布于 2011-11-29 06:44:26
您可以通过编写一个宏来扩展将NULL赋值给指针值的概念。例如:
#define FREE(ptr) do{ \
free((ptr)); \
(ptr) = NULL; \
}while(0)
然后,只要确保您的代码只使用FREE()而不使用free(),您就可以相当确信您编写的代码不会两次释放相同的内存。当然,这并不能防止对释放内存的库函数进行多次调用。而且它也不能保证每个malloc都是免费的。
你可以用一个函数来尝试这一点,但是它会变得异常,因为你必须抛出一个引用运算符,而且它看起来不再像一个对free()的普通调用了。
发布于 2011-11-29 03:01:27
你不需要,因为你不能。
跟踪从malloc()
获得的指针,并且只释放这些指针,而且只释放一次。
如果你愿意,内存是没有内存的,所以它不知道是否分配了内存。只有操作系统的内存管理器可以告诉您这一点(但C语言不包括任何标准化的机制来查询此信息)。
https://stackoverflow.com/questions/8300853
复制相似问题