malloc():内存损坏

新手上路,请多包涵

这是我认为可能导致此错误的简化程序。

 char *p = (char*)malloc(8192);
for(int i = 0; i < 9200; ++i){
  p[i] = '1';
}
char *s = (char*)malloc(strlen(p));

原来的项目比较复杂,所以我把它简化了。我使用 malloc 分配了 8192 个字节。然后我的程序将向数组中写入超过 8192 个字符。然后我将使用 malloc 分配内存。

这个小程序没有崩溃。但是在原来的大项目中,它会因为这个错误而崩溃:

malloc():内存损坏:0x0000000007d20bd0 ***

什么可能导致这种差异?

原文由 Yuan Wen 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 719
2 个回答

什么可能导致这种差异?

基本上,内存分配器一次分配内存 页面 供程序使用,并在其中为您提供一个指针(确保以下空间可供使用)。由于这些页面通常大于 8KiB,因此您的小程序没有问题。但是,如果一个更大的程序正在分配更多的内存并且写入越过分配空间的末尾,那么您最终将尝试写入未分配的内存(或另一个程序使用的内存!),从而破坏内存。

原文由 user7881131 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是 未定义的行为,因为您已分配 8192 字节内存,但您正在尝试写入 9200 字节。这超出了界限。

原文由 msc 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏