当我使用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 = "";
程序没有运行错误:“堆栈溢出”! 我不知道怎么解决它!
答案 0 :(得分:5)
您需要增加堆栈空间(如何完成取决于您的平台),或者您需要从堆中分配数组,甚至更好,使用std::vector
而不是数组。
答案 1 :(得分:2)
你试图在你的系统上(而不仅仅是它上面)在堆栈 1 上分配~1.48 MB的东西太多了。
一般情况下,堆栈不是用于保存大对象,而是应该将它们放在堆中;使用new
或std::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;