声明两个数组时出现堆栈溢出错误

3
当我用一个数组运行我的程序时,就像这样:
    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 = "";

程序出现错误:"堆栈溢出",无法运行!我不知道该如何解决!


9
幸运的是,这个网站特别关注堆栈溢出问题;-) - fredoverflow
2
我发现这个程序非常有帮助;它不会给出难以理解的错误信息,而是直接指出需要修复的地方。:) - Matteo Italia
5个回答

5

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


2
您正在尝试在堆栈上分配约1.48 MB的东西1,在您的系统(不仅仅是它)上,这太多了。通常情况下,堆栈不适合保留大型对象,您应该将它们放在堆中;使用动态分配和newstd::vector,甚至更适合您的情况的是boost::multi_array
1. 假设32位int

0
一个合适的解决方案是使用堆,但请注意,您可能会发现将其更改为:
short a[430][430];
short nicky[430][430]; // Added line

根据您的平台修复溢出问题。因此,如果“short”或“unsigned short”足够大,则这可能是一个选项。

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


0
为了避免堆栈溢出,请在堆中分配数组。
如果使用C语言,则可以通过以下方式在堆中分配大小为n的数组。
int* A = (int*) malloc(n*sizeof(int));

但是你必须记得在不需要时使用free释放内存

free(A);

为避免内存泄漏。


在C++中等价的代码:

int* A = new int[n];

并且免费使用

delete [] A;

这个网站很有帮助


0

本地变量分配给“堆栈”,堆栈是一种用于多种目的的存储空间,大小有限。

通常情况下,您可以声明多达几千字节的变量,但是当您想使用更多内存时,通常建议使用“堆”,可以通过new运算符或std::vector分配。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接