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

Я нашел регистрацию [приблизительно 110] Используя Windows Hosts File , который также говорит, что "Никакие подстановочные знаки не позволяются".

В прошлом я только что добавил дополнительные записи в файл hosts, потому что (как ранее сказано), это не так много дополнительной работы, когда Вы уже редактируете апачский файл конфигурации.

103
задан sth 4 December 2009 в 15:43
поделиться

3 ответа

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

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

int * array = new int [1000000];

Но помните, что для этого вам потребуется удалить [] массив. Лучшим решением было бы использовать std :: vector и изменить его размер до 1000000 элементов.

115
ответ дан 24 November 2019 в 04:20
поделиться

В C или C ++ локальные объекты обычно размещаются в стеке. Вы выделяете в стеке большой массив, больше, чем стек может обработать, поэтому вы получаете переполнение стека .

Не размещайте его локально в стеке, вместо этого используйте другое место. Этого можно достичь, сделав объект глобальным или разместив его в глобальной куче . Глобальные переменные подходят, если вы не используете их из других модулей компиляции. Чтобы это не произошло случайно, добавьте спецификатор статического хранилища, в противном случае просто используйте кучу.

Это будет выделено в сегменте BSS, который является частью кучи:

static int c[1000000];
int main()
{
   cout << "done\n";
   return 0;
}

Это будет выделено в Сегмент DATA, который также является частью кучи:

int c[1000000] = {};
int main()
{
   cout << "done\n";
   return 0;
}

Он будет размещен в каком-то неуказанном месте в куче:

int main()
{
   int* c = new int[1000000];
   cout << "done\n";
   return 0;
}
51
ответ дан 24 November 2019 в 04:20
поделиться

Ваш массив размещается в стеке, в этом случае попытайтесь выделить массив того же размера с помощью alloc.

2
ответ дан 24 November 2019 в 04:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: