我正在使用Microsoft Visual Studio 2010。 我尝试初始化这个二维数组时遇到问题。 - int A [480] [640] .Error是堆栈溢出。
这个错误是指向编译器还是什么?我该如何解决这个问题?
谢谢!
答案 0 :(得分:2)
正如其他人所提到的那样,你正在溢出有限大小的堆栈。大型数组应该(在堆上)动态分配而不是放在堆栈上。矢量是动态数组。矢量不直接支持2d,但您可以使用矢量矢量来模拟它。将xsize和ysize替换为您的尺寸,不再是常量。
vector< vector< int > > A(ysize, vector< int >(xsize));
for (int y = 0; y < ysize; y++)
{
for (int x = 0; x < xsize; x++)
{
A[y][x] = x * y;
}
}
请注意,y和x索引是向后的。这种方式通常更有效率。
答案 1 :(得分:1)
我相信你的确堆满了。有几种方法可以解决这个问题,但最简单的方法是制作此static
或将其移出main
函数。
static int A[480][640];
通过使这个静态,你基本上使它使用内存的数据段而不是堆栈(在这种情况下由于大的分配而溢出它)。在下图中,它将位于“初始化数据”中,这也是存储全局变量的位置(第二个选项也起作用的原因),在堆栈/堆之外。
或
int A[480][640];
int main(int, char **) {
//....
}
答案 2 :(得分:0)
您使用的是哪种语言?
2D数组初始化如下:(C#)
int[,] A = new int[x,y];