首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >malloc双重释放行为

malloc双重释放行为
EN

Stack Overflow用户
提问于 2012-12-03 22:24:44
回答 5查看 1.8K关注 0票数 2

malloc的GNU手册页面定义,当free()使用相同的指针(之前由malloc()分配)调用两次时,“会发生未定义的行为”。

这是什么行为?

在哪里可以找到有关此类错误的详细信息?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-12-04 02:48:54

“未定义的行为”仅仅意味着实现不需要以任何特定的方式处理这种情况;任何行为或结果都被认为是“正确的”。

free-ing指针不止一次的结果取决于malloc的底层实现;结果可能是崩溃和核心转储,或者它可能会破坏malloc竞技场(弄乱了未来的分配/释放),或者它可能会完全忽略double free

票数 2
EN

Stack Overflow用户

发布于 2012-12-03 22:28:39

对于未定义的行为,C99标准规定了以下内容(在术语和定义部分):

可能的未定义行为范围从完全忽略具有不可预测结果的情况,到在翻译或程序执行期间以环境特有的记录方式表现(具有或不具有诊断消息),到终止翻译或执行(具有诊断消息的发布)。

总而言之:任何事情都可能发生。最坏的情况是程序按预期运行。

票数 7
EN

Stack Overflow用户

发布于 2012-12-03 22:31:40

您不能同时释放同一指针两次。

如果你想在没有未定义行为的情况下做这样的行为。

您可以使用下面的宏,而不是完全免费的代码

代码语言:javascript
复制
#define FREE(X) free(X); X=NULL


char *p;
p=malloc(50);
FREE(p);
FREE(p);

当您强制指针为NULL时,这将避免在下一次释放中出现未定义的行为。因为free(NULL)不会导致未定义的行为。

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

https://stackoverflow.com/questions/13685240

复制
相关文章

相似问题

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