Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 声明2数组时堆栈溢出_C++_C_Stack Overflow - Fatal编程技术网

C++ 声明2数组时堆栈溢出

C++ 声明2数组时堆栈溢出,c++,c,stack-overflow,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 li

当我使用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 = "";
程序未运行,错误为:“堆栈溢出”!
我不知道怎么解决它

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

您试图在堆栈1上分配约1.48 MB的内容,在您的系统上(而不仅仅是在系统上)这太多了

一般来说,堆栈不是用来保存大对象的,应该将它们放在堆中;将动态分配与
new
一起使用,或者更适合您的情况



1.假设32位
int
s.

一个合适的解决方案是使用heap,但还要注意,您可能会发现更改为:

short a[430][430];
short nicky[430][430]; // Added line
修复溢出,具体取决于您的平台。因此,如果“短”或“无符号短”足够大,这可能是一个选项


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

局部变量被分配给“堆栈”,这是一个存储空间,用于多个目的,并且限制在一定的大小。 通常您可以声明高达几千字节的变量,但当您想要使用更多内存时,通常建议使用“heap”,它可以由new操作符或std::vector分配


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

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

如果使用C,那么在堆中分配一个大小为
n
的数组可以通过

int* A = (int*) malloc(n*sizeof(int));
但你必须记住,当不再需要你的记忆时,要释放它

free(A);
以避免内存泄漏


在C++中相当于:

int* A = new int[n];
免费的

delete [] A;

.

幸运的是,本网站专门关注堆栈溢出;-)我发现这个项目特别有帮助;它不是给出无法理解的错误消息,而是将您指向可以修复错误的地方<代码>:)