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

实现简易生命游戏模拟器时cout输出触发中断错误求助

生命游戏模拟器中断问题的解决方案

嘿,我一眼就揪出了问题的核心——动态数组的分配时机完全出错了,这直接引发了内存越界访问,最终触发了中断。让我一步步给你拆解清楚:

问题根源

你定义了全局变量cellNumber和cellTable:

int cellNumber;
cell *cellTable = new cell[cellNumber];

在C++里,全局变量会被默认初始化为0,所以cellTable实际上被分配了一个大小为0的空数组。之后你在main函数里通过cellNumber = x*y修改了cellNumber的值,但这并不会改变cellTable已经分配好的数组大小!

接下来的嵌套循环里,你不断给cellTable[cellCounter]赋值,而cellCounter会从0增长到x*y-1,这完全超出了cellTable的实际大小(0),属于非法内存访问。这种未定义行为可能不会立刻报错,但会悄悄破坏内存结构,最终在你执行cout << result << endl时触发中断。

修复步骤

  1. 调整动态数组的分配时机:把cellTable的分配移到cellNumber被正确赋值之后,也就是main函数里cellNumber = x*y这行代码之后:

    int main() {
        int x;
        int y;
        int cellCounter = 0;
        cin >> x >> y;
        cellNumber = x*y;
        // 在这里才分配符合需求的数组
        cellTable = new cell[cellNumber];
        cin >> numberOfTunrs;
        // ... 后续代码保持不变
    }
    

    同时,把全局的cellTable声明改成只声明不初始化:

    int cellNumber;
    cell *cellTable; // 先不分配内存
    
  2. 避免内存泄漏:在程序结束前,别忘了释放动态分配的内存,比如在main函数末尾加上:

    delete[] cellTable;
    
  3. 额外优化提示:你的countGroups函数里,checkingGroup + i可能会出现字符溢出的问题(比如当i超过25时,'A'+25是'Z',再往后就超出ASCII字母范围了),不过这不是当前中断的原因,后续可以优化这个逻辑。

为什么这能解决问题?

现在cellTable的大小和cellNumber完全匹配,循环里的数组访问都是合法的,不会再破坏内存结构,中断自然就消失了。

内容的提问来源于stack exchange,提问作者Magda Wolfii Krasucka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:31:32