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

C++构造函数初始化二维数组固定位置出现48异常值问题求助

问题根因

该问题完全由C++动态内存的初始化规则导致,属于典型的未定义行为:

  • 你使用new int[size]申请的动态数组属于默认初始化,对于int这类基础数据类型,默认初始化不会清空内存空间,数组里存储的是对应内存地址之前遗留的任意垃圾值。你看到的48、部分尺寸下数值为0都只是随机现象,和你的代码逻辑没有必然关联,不同运行环境、不同运行时点输出的结果都可能发生变化。
  • 你观察到的「尺寸为12到20时无异常」只是巧合:这几个尺寸下你申请到的内存刚好是操作系统刚分配的、已经清零的内存页,不代表此时代码逻辑正确。

修复方法

你必须主动为数组元素设置初始值,有两种常见的修改方案:

  • 方案1:申请内存时直接做值初始化,只需要修改构造函数里的数组申请语句,在末尾加一对空括号即可自动将所有元素初始化为0:
    将graph[i] = new int [size];改为graph[i] = new int[size]();
  • 方案2:显式遍历数组赋值,申请完每一行数组后,加一层循环手动给所有元素赋值为0。

额外优化建议

你当前的代码存在内存泄漏问题:动态申请的二维数组没有在类的析构函数中对应释放。建议要么补充析构函数释放内存,要么直接用std::vector<std::vector<int>>替代手动管理的二级指针,不需要自行处理内存申请、释放、初始化逻辑,更不容易出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:06:03