РЕДАКТИРОВАТЬ: В других ответах я вижу, что проблема, скорее всего, связана с тем, что число, переданное new[]
, становится отрицательным.Я согласен с тем, что это, скорее всего, так, и я оставляю этот ответ только потому, что считаю, что он содержит информацию, которая может иметь отношение к некоторым подобным случаям, когда проблема не в том, чтобы позвонить по номеру new[]
с отрицательным номером.
Первый вопрос, который приходит на ум, - достаточно ли у вас памяти.С оперативной памятью 4 ГБ и без подкачки общий объем памяти, который может быть выделен всем процессам и , составляет 4 ГБ.
Обратите внимание, что даже если для процесса было доступно более 1 ГБ памяти, malloc
и free
(которые называются снизу new[]
и delete[]
, могут не вернуть память обратносистемы, и они могут фактически хранить каждый из полученных / освобожденных блоков, так что объем памяти вашей программы может достигать 2 ГБ (необходимо проверить это с помощью реализации malloc в вашем ядре, поскольку многие реализации даютназад большие блоки).
Наконец, когда вы запрашиваете массив размером 1 ГБ, вы запрашиваете 1 ГБ из непрерывной памяти, и это может быть просто случай, когда у вас гораздо больше памяти, но ни один изблоки достаточно велики для этого конкретного запроса.