当前位置: 首页 > 面试题库 >

malloc双重释放行为

海叶秋
2023-03-14
问题内容

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

那是什么样的行为?
在哪里可以找到有关这种错误的更多信息?


问题答案:

“未定义的行为”仅表示不需要以任何特定方式处理该情况的实现; 任何 行为或结果均被视为“正确”。

free多次对指针进行操作的结果取决于malloc;
的基础实现;结果可能是崩溃和核心转储,或者可能破坏malloc竞技场(破坏将来的分配/释放),或者可能free完全忽略双精度。



 类似资料:
  • 最近,我在一个程序中捕获lambda中的时,遇到了一个奇怪的双重免费bug。我可以用以下最小的例子来减少它: 使用GCC 12.2.0和地址清理器编译并运行它,会在中生成一个双空闲: 一旦函数返回,结构中的拥有唯一拥有封闭的对象的。这意味着,将分配给它应该会破坏,这反过来会释放对象。 这里发生的似乎是首先运行lambda的析构函数,它在释放内存之前销毁、object及其附带的 std::funct

  • 我已经声明了一个游标,它获取了在特定月份创建的所有票证ID,我正在使用它进行插入。 一旦插入成功,我将释放光标并提交事务。 打开@tickets关闭@tickets释放@tickets设置@message='success' 现在我正在开始另一个事务以进行删除 开始事务删除; -- 我不想再次设置光标来获取票证ID。希望使用相同的@tickets光标进行删除,只需再次打开即可。 我已经释放了@ti

  • malloc(配置内存空间) 相关函数 calloc,free,realloc,brk 表头文件 #include<stdlib.h> 定义函数 void * malloc(size_t size); 函数说明 malloc()用来配置内存空间,其大小由指定的size决定。 返回值 若配置成功则返回一指针,失败则返回NULL。 范例 void p = malloc(1024); /*配置1k的内存

  • malloc 配置内存空间 相关函数 calloc,free,realloc,brk 表头文件 #include<stdlib.h> 定义函数 void *malloc(size_t size); 函数说明 malloc()用来配置内存空间,其大小由指定的size决定。 返回值 若配置成功则返回一指针,失败则返回NULL。 范例 void p = malloc(1024); /*配置1k的内存

  • 我在C#上度过了一段糟糕的时光,在我不再引用它之后,没有为我保存在内存中的大型结构释放内存。 我在下面包含了一些代码,它们显示了与我遇到的问题类似的问题。我想我一定是误解了GC,因为我不确定为什么下面的代码会抛出内存不足异常。 有人知道为什么我包含的代码会丢失内存吗?没有一份名单被保留,可以立即清理。 谢谢, 保罗 复制:全新的4.5控制台应用程序,将代码粘贴到Main中。 异常将在for循环的第

  • 当我在执行语句后检查分配给的内存地址时,我发现内存内容为0。因为我读到没有将内存初始化为0,所以这是正确的行为吗?