声明2数组时堆栈溢出

时间:2011-02-14 00:33:37

标签: c++ c stack-overflow

当我使用1个数组运行程序时,如下所示:

    int a[430][430];
    int i, j, i_r0, j_r0;
    double c, param1, param2;
    int w_far = 0,h_far = 0;
    char* magic_num1 = "";

很好!

但是,当我写道:

    int a[430][430];
    int i, j, i_r0, j_r0;
    int nicky[430][430]; // Added line
    double c, param1, param2;
    int w_far = 0,h_far = 0;
    char* magic_num1 = "";

程序没有运行错误:“堆栈溢出”! 我不知道怎么解决它!

5 个答案:

答案 0 :(得分:5)

您需要增加堆栈空间(如何完成取决于您的平台),或者您需要从堆中分配数组,甚至更好,使用std::vector而不是数组。

答案 1 :(得分:2)

你试图在你的系统上(而不仅仅是它上面)在堆栈 1 上分配~1.48 MB的东西太多了。

一般情况下,堆栈不是用于保存大对象,而是应该将它们放在堆中;使用newstd::vector进行动态分配,或者更适合您的boost::multi_array

<小时/> 1.假设32位int s。

答案 2 :(得分:0)

一个正确的解决方案是使用堆,但请注意,您可能会发现更改为:

short a[430][430];
short nicky[430][430]; // Added line

修复溢出,具体取决于您的平台。因此,如果“短”或“无符号短”足够大,这可能是一种选择。

实际上,即使使用堆,也要仔细考虑数组类型,以减少大型数组的内存占用。

答案 3 :(得分:0)

将局部变量分配给“堆栈”,这是一个用于多种用途并限制为特定大小的存储空间。

通常你可以声明变量高达几千字节,但是当你想要使用更多内存时,通常建议使用“heap”,它可以由new运算符或std :: vector分配。

std :: vector是传统数组的替代品,其数据安全地存储在堆中。

答案 4 :(得分:0)

为避免堆栈溢出,请在堆中分配数组。

如果使用C,则可以在堆中分配大小为n的数组,例如,

int* A = (int*) malloc(n*sizeof(int));

但是当您不再需要使用该内存时,您必须记住要释放该内存

free(A);

避免内存泄漏。


等效于C ++:

int* A = new int[n];

免费

delete [] A;

This site was helpful