1

我正在使用 Microsoft Visual Studio 2010。当我尝试初始化这个二维数组时遇到问题。- int A[480][640] .Error 是堆栈溢出。

这个错误是指向编译器还是什么?我怎样才能解决这个问题?

谢谢!

4

3 回答 3

2

正如其他人所提到的,您正在溢出大小有限的堆栈。大数组应该动态分配(在堆上)而不是放在堆栈上。向量是一个动态数组。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 索引是向后的。这种方式通常效率更高。

于 2013-08-22T14:57:02.447 回答
1

我相信你确实溢出了堆栈。有几种方法可以解决此问题,但最简单的两种方法是制作此问题static或将其移出您的main功能。

static int A[480][640];

通过使这个静态,你基本上使它使用内存的数据段而不是堆栈(并且在这种情况下由于大量分配而溢出它)。在下图中,它将位于堆栈/堆之外的“初始化数据”中,这也是存储全局变量的地方(第二个选项也适用的原因)。

或者

int A[480][640];
int main(int, char **) {
    //....
}
于 2013-08-22T14:31:15.253 回答
0

您使用什么语言?二维数组初始化如下:(C#) int[,] A = new int[x,y];

于 2013-08-22T14:22:25.223 回答