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

C++使用fopen写数组到二进制文件报malloc(): corrupted top size错误

根因分析

内存分配不足导致堆缓冲区溢出,破坏了malloc的内存管理元数据,最终触发SIGABRT信号报错。
在userChoice函数中,你定义合并后数组长度为mergedLength = 2 * length,但为mergedArray分配内存时仅申请了length个int大小的空间:

// 错误:仅分配了length个int的空间,实际需要2*length个
int *mergedArray = (int *) malloc(length * sizeof (int));
// 越界写入:向只有length长度的数组写入mergedLength=2*length个元素
initializeArray(mergedArray, mergedLength);

越界写入直接覆盖了堆顶部的malloc控制结构,因此触发malloc(): corrupted top size错误。

修复方法

修改mergedArray的内存分配逻辑,申请足够容纳2倍长度的空间即可:

int *mergedArray = (int *) malloc(mergedLength * sizeof (int));

可选优化项

  • 当前所有菜单选项都会提前分配secondArray和mergedArray内存,仅FOUR选项会用到,可将这两块内存的分配、释放逻辑移到case FOUR分支内部,减少不必要的内存开销。
  • C++程序优先使用new/delete替代malloc/free,或直接使用std::vector容器,降低手动内存管理带来的越界、泄漏风险。
  • case ONE分支中givenNumber未初始化就传入serialSearch,虽函数内部会重新读取赋值,但存在规范隐患,建议初始化变量。

内容的提问来源于stack exchange,提问作者Feanor Nosselo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:39:01