You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言归并排序触发munmap_chunk(): invalid pointer错误求助

问题分析与解决

核心原因:堆内存分配不足导致堆溢出

你的代码中存在内存分配错误,直接破坏堆结构,最终触发munmap_chunk(): invalid pointer错误:

int* list = malloc(n);
space = malloc(n);

malloc()的参数是字节数,但你需要存储n个int类型元素。在绝大多数系统中,int占4字节,因此实际需要的内存大小应为n * sizeof(int)。仅分配n字节空间时,当n>1,内存不足以容纳所有元素,后续写入会发生堆越界,覆盖堆管理的元数据,导致free()时识别到无效指针。

异常值的由来

你观察到space[8]和space[9]的奇怪数值,正是堆越界写入破坏的堆内部管理数据,并非正常输入值。

修复方案

将两处malloc的参数修改为n * sizeof(int),确保分配足够内存:

int* list = malloc(n * sizeof(int));
space = malloc(n * sizeof(int));

修改后重新编译运行,程序即可正常完成归并排序并释放内存。

补充说明

你禁用PIE和栈保护的编译选项与本次堆溢出问题无直接关联,只是关闭保护后,堆结构被破坏的错误更直接地表现为munmap_chunk()异常,而非其他隐晦的崩溃或行为异常。

内容的提问来源于stack exchange,提问作者Sunghyeon Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:52:46