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
相关产品推荐
相关产品推荐

