二维数组大小

时间:2013-08-22 14:20:52

标签: c++ arrays size

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

这个错误是指向编译器还是什么?我该如何解决这个问题?

谢谢!

3 个答案:

答案 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];