首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么double free()不会使程序崩溃?

为什么double free()不会使程序崩溃?
EN

Stack Overflow用户
提问于 2017-06-04 01:33:48
回答 1查看 592关注 0票数 0

根据我的理解,下面的程序可能已经崩溃,因为释放了已经释放的内存,但它没有。在我的Linux机器上运行。

代码语言:javascript
复制
#include <stdio.h>
#include <malloc.h>
int main(void) {
      int *ptr1 = NULL;
      ptr1 = malloc(100);
      free(ptr1);
      free(ptr1);
      printf("%d\n", *ptr1);
      return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2017-06-04 02:24:49

根据free的定义,双重free实现了未定义的行为:

7.20.3.2免费函数

free函数使ptr指向的空间被释放,即可用于进一步的分配。如果ptr为空指针,则不会发生任何操作。否则,如果参数与之前由calloc、malloc或realloc函数返回的指针不匹配,或者如果空间已通过调用free或realloc释放,则行为为undefined

而未定义的行为本身在相同的标准中定义如下:

3.4.3 (1)未定义的行为

在使用不可移植或错误的程序构造或错误数据时的行为,本国际标准对此没有任何要求注意可能的未定义行为范围从完全忽略具有不可预测结果的情况,到在翻译或程序执行期间以环境特有的记录方式表现(有或没有发出诊断消息),到终止翻译或执行(通过发出诊断消息)

因此,具有未定义行为的程序可能会“崩溃”,但也可能不会。它还没有定义..。

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

https://stackoverflow.com/questions/44346793

复制
相关文章

相似问题

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