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

增大栈空间后C++程序出现SIGBUS错误的排查与解决

问题描述

我是C++初学者,需运行递归代码处理超大输入。最初程序报SIGSEGV错误,判断是栈空间不足,遂在CLion的CMakeLists.txt中添加set(CMAKE_EXE_LINKER_FLAGS "-Wl,-stack_size,0x20000000"),但现在出现SIGBUS错误(被信号10中断:SIGBUS)。

我的代码是二维网格的DFS实现:

void dfs(int x, int y) {
    if (vis[x][y]) {
        return;
    }
    vis[x][y] = 1;

    if (!useless[x][y]) {
        int cnt_ok = 0;
        for (int d = 0; d < 4; ++d) {
            int nx = x + dx[d];
            int ny = y + dy[d];

            if (valid(nx, ny)) {
                cnt_ok += !useless[nx][ny];
            }
        }
        useless[x][y] = cnt_ok < 2;
    }

    for (int d = 0; d < 4; ++d) {
        int nx = x + dx[d];
        int ny = y + dy[d];

        if (valid(nx, ny)) {
            dfs(nx, ny);
        }
    }
}

其中valid()用于校验坐标合法性,dx[4] = {-1, 1, 0, 0},dy[4] = {0, 0, 1, -1},vis和useless向量尺寸与网格一致。

调试时错误出在DFS函数定义行(62行)和递归调用行(86行)。处理大输入时电脑卡顿,小输入运行正常;注释掉if (!useless[x][y])后,大输入也能正常运行。

解决更新

已解决,将栈大小调整为0x40000000后程序运行正常。(此前因先出现SIGSEGV错误,误以为栈空间足够,未料到SIGBUS也由栈空间不足导致)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:27:31