首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何检查指针是否已在C中释放?

如何检查指针是否已在C中释放?
EN

Stack Overflow用户
提问于 2011-11-29 03:00:00
回答 4查看 61.5K关注 0票数 41

我想检查一个指针是否已经释放了。我如何使用gnu编译器集来做这件事?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-29 03:03:39

你不能。跟踪它的方法是在释放指针后将它赋值给0NULL。然而,正如Fred Larson所提到的,这对指向同一位置的其他指针没有任何作用。

代码语言:javascript
复制
int* ptr = (int*)malloc(sizeof(int));
free(ptr);
ptr = NULL;
票数 53
EN

Stack Overflow用户

发布于 2011-11-29 06:44:26

您可以通过编写一个宏来扩展将NULL赋值给指针值的概念。例如:

代码语言:javascript
复制
#define FREE(ptr) do{ \
    free((ptr));      \
    (ptr) = NULL;     \
  }while(0)

然后,只要确保您的代码只使用FREE()而不使用free(),您就可以相当确信您编写的代码不会两次释放相同的内存。当然,这并不能防止对释放内存的库函数进行多次调用。而且它也不能保证每个malloc都是免费的。

你可以用一个函数来尝试这一点,但是它会变得异常,因为你必须抛出一个引用运算符,而且它看起来不再像一个对free()的普通调用了。

票数 6
EN

Stack Overflow用户

发布于 2011-11-29 03:01:27

你不需要,因为你不能。

跟踪从malloc()获得的指针,并且只释放这些指针,而且只释放一次。

如果你愿意,内存是没有内存的,所以它不知道是否分配了内存。只有操作系统的内存管理器可以告诉您这一点(但C语言不包括任何标准化的机制来查询此信息)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8300853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档