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

C++动态数组程序触发HEAP CORRUPTION DETECTED错误如何解决?

问题原因

你遇到的堆破坏错误是数组越界写入导致的,错误出现在分类写入9个动态数组的for循环里,从80~84分段开始,所有目标指针都错误复用了testScores7579:

// 80-84分段,错误写入testScores7579数组
if (randomTestScores[i] >= 80 && randomTestScores[i] <= 84) {*(testScores7579 + l8084) = randomTestScores[i]; l8084++;}
// 85-89分段,错误写入testScores7579数组
if (randomTestScores[i] >= 85 && randomTestScores[i] <= 89) {*(testScores7579 + l8589) = randomTestScores[i]; l8589++;}
// 90-94分段,错误写入testScores7579数组
if (randomTestScores[i] >= 90 && randomTestScores[i] <= 94) {*(testScores7579 + l9094) = randomTestScores[i]; l9094++;}
// 95-99分段,错误写入testScores7579数组
if (randomTestScores[i] >= 95 && randomTestScores[i] <= 99) {*(testScores7579 + l9599) = randomTestScores[i]; l9599++;}

testScores7579数组的大小只有你之前统计的s7579,你把其他分段的数值都写入这个数组,远远超过了它的申请长度,直接破坏了堆空间结构,所以会触发堆破坏检测报错。

修复方案

把这四行的目标指针替换为对应分段的数组指针即可:

// 80-84分段修改为写入testScores8084
if (randomTestScores[i] >= 80 && randomTestScores[i] <= 84) {*(testScores8084 + l8084) = randomTestScores[i]; l8084++;}
// 85-89分段修改为写入testScores8589
if (randomTestScores[i] >= 85 && randomTestScores[i] <= 89) {*(testScores8589 + l8589) = randomTestScores[i]; l8589++;}
// 90-94分段修改为写入testScores9094
if (randomTestScores[i] >= 90 && randomTestScores[i] <= 94) {*(testScores9094 + l9094) = randomTestScores[i]; l9094++;}
// 95-99分段修改为写入testScores9599
if (randomTestScores[i] >= 95 && randomTestScores[i] <= 99) {*(testScores9599 + l9599) = randomTestScores[i]; l9599++;}

其他优化建议

  • 全局变量可以尽量放到main函数内部定义,避免全局空间污染
  • 统计分段和写入分段可以合并成一个循环,不用两次遍历全部199个元素,提高效率
  • 如果使用C++11及以上版本,可以用std::vector代替手动管理的动态数组,自动处理内存申请释放,避免内存泄漏和越界问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:54:10