C ++:基本for循环

时间:2015-11-09 16:27:39

标签: c++ exception

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。

1 个答案:

答案 0 :(得分:-1)

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

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