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

C++初始化二维数组报terminate called recursively错误如何解决

错误原因
  • grid为Cell***类型,代码仅完成了第一层内存分配,申请了rows个Cell**元素的存储空间,未对每个grid[i]分配cols个Cell*元素的存储空间,直接访问grid[i][j]属于野指针偏移访问,触发内存越界的未定义行为,导致程序提前崩溃。
修复方案

在遍历列维度初始化单元格前,先为每一行分配对应大小的内存即可,修改后的构造函数代码如下:

Sudoku::Sudoku(int rows, int cols)
{
    this->setRows(rows);
    this->setCols(cols);

    this->grid = new Cell **[this->rows];

    unsigned int i, j;

    for (i = 0; i < this->rows; i++)
    {
        // 新增行维度内存分配
        this->grid[i] = new Cell*[this->cols];
        for (j = 0; j < this->cols; j++)
        {
            std::cout << "i: " << i << " j: " << j << std::endl;
            this->grid[i][j] = new Cell();
        }
    }

    this->populateGrid();
    this->hideCells();
}

补充说明:基于C++11开发时更推荐使用std::vector容器替代裸指针管理网格内存,无需手动处理内存的申请与释放,可有效避免同类内存错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:36:04