2013-03-11 3 views
-8

У меня есть очень простой вопрос для вас:Как создать сложный массив?

#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

Вы должны принять некоторые ответы на свои вопросы. Это помогает. – 0x499602D2

ответ

6

Вы «взорвали стек» - когда у вас есть локальная переменная в основном, например, она будет использовать пространство в стеке. В этом случае k * sizeof double или k * sizeof float - так как типичные компиляторы используют 4 байта для float, мы говорим о 800 КБ для второго варианта и 1,6 МБ для первого варианта, если стек составляет всего 1 МБ, тогда первый будет идти дальше размер стека.

Есть несколько решений, один из которых, конечно, принять метод собственно C++ с использованием вектора:

vector<complex <double> > r0, r1; 

r0.resize(k/2); 
r1.resize(k/2); 

Две другие варианты

Выделяют динамически:

complex<double> *r0 = new complex<double>[k/2]; 

... 

delete [] r0; 

Or сделать глобальные переменные r0 и r1.

Смежные вопросы