如何创建复杂的数组?

时间:2013-03-11 16:33:34

标签: c++

我有一个非常简单的问题:

#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>!可能是什么原因?

1 个答案:

答案 0 :(得分:6)

你正在“炸毁堆栈” - 当你在main中有局部变量时,它会使用堆栈上的空间。在这种情况下,k * sizeof doublek * 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全局变量。