-9

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

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

4

1 回答 1

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 全局变量。

于 2013-03-11T16:39:19.583 回答