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。
答案 0 :(得分:-1)
int test[M][N];
在堆栈上分配一个M * N元素数组。当M == 100000且N == 1000时,它是一个包含1亿个元素的数组。 int
通常至少为4个字节,因此您尝试在堆栈上分配400MB阵列,这不符合默认(或可能是任何)链接器设置。
您可以做的是使用malloc
或new[]
在堆上分配那么多内存。您也可以使用第三方类来操作可以为您完成的矩阵。