我正在尝试进行简单的计算,我需要将指针交换到两个数组。所以,我可以在计算时在这两个数组之间切换。以下是该方向的简单代码。如果我注释掉代码,第一个代码运行正常,但第二个代码给出分段错误。我不明白注释代码是如何产生任何影响的。它只是创建一个数组。我的代码中是否还有其他错误导致这个奇怪的问题?
运行良好
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
/*
int fixed[1024][1024];
for (int i = 0; i < 1024; i++) {
for (int j = 0; j < 1024; j++) {
fixed[i][j] = 1;
}
}
*/
float o_array[1024][1024];
float n_array[1024][1024];
float (*old_array)[1024] = o_array;
float (*new_array)[1024] = n_array;
for (int i = 0; i < 1024; i++) {
for (int j = 0; j < 1024; j++) {
old_array[i][j] = 100.0f;
}
}
return 0;
}
这给出了分段错误
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int fixed[1024][1024];
for (int i = 0; i < 1024; i++) {
for (int j = 0; j < 1024; j++) {
fixed[i][j] = 1;
}
}
float o_array[1024][1024];
float n_array[1024][1024];
float (*old_array)[1024] = o_array;
float (*new_array)[1024] = n_array;
for (int i = 0; i < 1024; i++) {
for (int j = 0; j < 1024; j++) {
old_array[i][j] = 100.0f;
}
}
return 0;
}
答案 0 :(得分:1)
默认情况下,大多数编译器将堆栈的默认内存限制设置得相当低(通常约为1mb)。
假设每个浮点数是4个字节,1024个单位的多维数组将占用1024 x 1024 x 4 = 4,194,304个字节或大约4兆字节。
您可以使用命令行或IDE的构建/链接器选项来增加编译器堆栈的大小。