我正在使用 Microsoft Visual Studio 2010。当我尝试初始化这个二维数组时遇到问题。- int A[480][640] .Error 是堆栈溢出。
这个错误是指向编译器还是什么?我怎样才能解决这个问题?
谢谢!
正如其他人所提到的,您正在溢出大小有限的堆栈。大数组应该动态分配(在堆上)而不是放在堆栈上。向量是一个动态数组。Vector 不直接支持 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 索引是向后的。这种方式通常效率更高。
我相信你确实溢出了堆栈。有几种方法可以解决此问题,但最简单的两种方法是制作此问题static
或将其移出您的main
功能。
static int A[480][640];
通过使这个静态,你基本上使它使用内存的数据段而不是堆栈(并且在这种情况下由于大量分配而溢出它)。在下图中,它将位于堆栈/堆之外的“初始化数据”中,这也是存储全局变量的地方(第二个选项也适用的原因)。
或者
int A[480][640];
int main(int, char **) {
//....
}
您使用什么语言?二维数组初始化如下:(C#)
int[,] A = new int[x,y];