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

C++数独程序运行类setter方法时无错误停止执行问题求助

问题可能成因分析
    1. findValidValues返回空std::vector,触发未定义行为
      当遍历到某个单元格时,findValidValues(i,j)没有返回任何合法值,此时validValues.size() == 0,执行rand() % validValues.size()就会触发除0错误,这类硬件异常不属于C++标准异常的捕获范围,添加在setNumber内的try-catch完全无法捕获,程序会直接静默终止。调试时行号显示可能存在偏移,会让你误以为崩溃发生在this->number = n这一行,实际崩溃点在前面的validValues.at()或者取模运算环节。
      你可以在validValues定义后加一行校验代码快速验证:
    if (validValues.empty()) {
        std::cout << "No valid value for cell (" << i << "," << j << ")" << std::endl;
        abort();
    }
    
    1. 网格内存访问越界
      检查Sudoku类中rows、cols成员的类型:如果二者是无符号类型,而构造函数传入的rows/cols参数为负数,隐式类型转换会把负数转为极大的无符号值,导致new申请的内存和实际遍历范围不匹配,后续遍历grid数组时触发越界访问,出现段错误直接终止。
      另外也要检查setRows、setCols的实现,确认是否正确对输入参数做了合法性校验、正确给成员变量赋值。
    1. Cell类成员定义异常
      如果Cell类中的number成员不是普通int类型,而是未初始化的int*指针/int&引用,执行this->number = n时就会访问非法内存直接崩溃。如果是普通int类型则该环节不会触发崩溃。
    1. 随机数生成逻辑异常
      若你没有提前调用srand()初始化随机数种子,部分环境下rand()的返回值可能出现异常,叠加validValues非空但边界处理错误的情况也可能触发异常。

内容的提问来源于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 04:36:04