我有一个非常简单的问题:
#include < iostream>
#include < complex>
using namespace std;
int main()
{
int k=200000;
complex <double> r0[k/2],r1[k/2]; ///wrong!!!
complex <float> r0[k/2],r1[k/2]; ///right
return 0;
}
我只是想创建一个复杂的数组。 k=200000
在这里,计算机停止工作(不是错误,它显示我的文件停止工作),如果我只是complex <double>
,它适用于complex<float>
!可能是什么原因?
答案 0 :(得分:6)
你正在“炸毁堆栈” - 当你在main中有局部变量时,它会使用堆栈上的空间。在这种情况下,k * sizeof double
或k * sizeof float
- 因为典型的编译器使用4个字节用于浮点数,我们称第二个变量为800KB,如果堆栈仅为1MB,则第一个变量为1.6MB,然后第一个将超出堆栈的大小。
有几种解决方案,其中之一当然是采用适当的C ++方法使用vector:
vector<complex <double> > r0, r1;
r0.resize(k/2);
r1.resize(k/2);
另外两个选项
动态分配:
complex<double> *r0 = new complex<double>[k/2];
...
delete [] r0;
或者制作r0和r1全局变量。