C++ : EXC_BAD_ACCESS 在基本 for 循环中

C++ : EXC_BAD_ACCESS at basic for loop

本文关键字:for 循环 ACCESS EXC BAD C++      更新时间:2023-10-16
int main(int argc, const char * argv[]) {
    int N,M;
    std::cin >> N;
    std::cin >> M;
    bool member[N];
    for (int i= 0; i < N ; i++) {
        member[i] = false;
    }
    int test[M][N];
    int testSize[M];
    /*//std::fill_n(testSize, M, 0);
    for (int i = 0; i < M; i++) {
        std::fill_n(test[M], N, -1);
    }*/
    for (int i = 0; i < M; i++) {
        for (int j = 0; j < N ; j++) {
            test[i][j] = -1;
        }
        testSize[i] = 0;
    }
}

这是我上面的c ++代码,这是简单的代码,不是吗?

但是当程序将 M 作为 100000 和 N 作为 1000 时,在第二个循环中EXC_BAD_ACCESS。

我不知道为什么会这样。

当放入小尺寸数据时,没有错误,但这种情况使其成为错误。

我正在解决一个算法问题并面对未知的错误。

我的程序有什么需要修复的吗?

正如你看到我的代码,我想要的是将数组 test 和 testSize 初始化为相同的值;-1 和 0。

int test[M][N];堆栈

上分配一个 M*N 元素数组。当 M == 100000 和 N==1000 时,它是一个包含 1 亿个元素的数组。 int通常至少为 4 个字节,因此您尝试在堆栈上分配 400MB 的数组,这不适合默认(或可能根本不适合任何(链接器设置。

您可以做的是使用 mallocnew[] 在堆上分配那么多内存。您还可以使用第 3 方类来操作将为您完成此操作的矩阵。