VC ++ Int64 arr [200000] - ошибка переполнения стека - PullRequest
0 голосов
/ 29 октября 2009

Это мое простое объявление массива

INT64 arr[200000];

Выдает ошибку в VC ++, но запускается в C # ..

Не могли бы вы помочь с этим?

Спасибо Arun

Ответы [ 2 ]

3 голосов
/ 29 октября 2009

Попробуйте выделить массив в куче (используя new или malloc), а не в стеке.

В качестве альтернативы: вы можете увеличить размер стека потока, используя свойства проекта для размещения этого массива (его размер составляет 200000 * размер (INT64) байтов)

2 голосов
/ 29 октября 2009

В C # у вас, вероятно, есть этот код:

Int64[] arr = new Int64[200000];

Это не размещает сам массив в стеке, только ссылка на массив. Поскольку массивы являются ссылочными типами в .NET, сам массив живет в куче, в которой доступно больше места, чем в стеке.

В C, следующий код:

INT64 arr[200000];

на самом деле попытается выделить массив в стеке, и обычно это не удастся, так как большинство систем не создают стек, достаточно большой для хранения такого количества данных.

У вас есть несколько вариантов, но лучше всего разместить их в куче, используя вместо этого оператор new[].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...