Самое простое решение всегда неверно.

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    float x[1000][1000];

    return 0;
}

учаю «Исключение первого шанса на 0x01341637 в s.exe: 0xC00000FD: переполнение стека». Почему?

 Martin York07 янв. 2011 г., 21:03
 Charles Salvia07 янв. 2011 г., 21:08

Ответы на вопрос(4)

размер объекта больше размера (по умолчанию), определенного для фрейма стека функций. Есть два решения: 1) создать объект в куче, которая, вероятно, будет больше; или 2) увеличить размер кадра стека функций, что может быть проблематично в 32-битной среде, поскольку вы можете исчерпать адресное пространство, но это легко сделать в 64-битной среде.

Просто объявите ваш массив статическим:

static float x[1000][1000];

Отредактировано, чтобы добавить:

Вздох Еще один тихий даунвотер. Не то чтобы я удивился. Это, очевидно, самое простое решение проблемы ОП, поэтому оно нарушает основной принцип ООП-Комиссариата:Самое простое решение всегда неверно.

"размер стека по умолчанию равен 1 МБ"

Глянь сюда:http://msdn.microsoft.com/en-us/library/tdkhxaks(v=VS.100).aspx

 Billy ONeal07 янв. 2011 г., 21:31
Это также предполагает, что вы используете Windows и MSVC.
 Martin York07 янв. 2011 г., 21:08
Приблизительно 3,8 мегабайта. Предполагая, что sizeof (float) == 4
 Zac07 янв. 2011 г., 21:06
на самом деле, вам, вероятно, следует использовать какой-то динамический контейнер, как предлагает @birryee.
Решение Вопроса

очно места для стека1000 * 1000 элементы.

Вы должны будете разместить свой массив в куче. Вы можете сделать это с помощьюnew ключевое слово, но проще всего использоватьstd::vector.

std::vector<std::vector<float> > floats(1000);
for (unsigned i = 0; i != floats.size(); ++i) floats[i].resize(1000);

Это даст вам двумерный вектор с плавающей точкой, с 1000 элементов на вектор.

Также см:Ошибка сегментации на больших размерах массива

 user41578907 янв. 2011 г., 21:00
что я должен делать?
 Gene Bushuyev07 янв. 2011 г., 21:24
нет необходимости писать цикл, когда библиотека делает это за вас: std :: vector <std :: vector <float>> floats (1000, std :: vector <float> (1000, 0.0));
 jalf09 янв. 2011 г., 15:43
@TonyK: не в моем опыте. Обычно это просто приводит к большему количеству движущихся вещей, пока не заработает. Повторяйте до тех пор, пока движение вокруг не перестанет работать, после чего «программист» обычно сдается.
 Mehrdad07 янв. 2011 г., 21:02
Вы также можете создать статический массив динамических массивов (он же массив указателей). Просто знайте, что динамические массивы не будут непрерывными в памяти.
 wkl07 янв. 2011 г., 21:01
@HPT - одним из решений является использование динамически выделяемой памяти или использование чего-то вроде вектора вектора.

Ваш ответ на вопрос