2015-06-14 4 views
-2

Я просто хочу знать, почему это происходит?Ошибка сегментации (сброс ядра) для объявления вектора

Если я просто объявляю vector< pair<int,int> > graph[1000050]; за пределами моей main(), моя программа не дает никаких ошибок, но если я просто объявляю ее внутри моей ошибки сегментации, то почему?

+4

Возможно, он слишком большой для вашего стека. Но вы действительно хотите массив векторов? – juanchopanza

ответ

2

Он слишком большой для стека. Вместо этого используйте вектор векторов.

-2

Внутри основной он имеет область блока, поэтому он объявлен как локальная переменная и делается попытка выделить его в стек. Вы запрашиваете 10мил x (sizeof (int) * 2 + вектор накладных пакетов), которые должны быть выделены, что явно слишком много для вашего стека.

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

+3

Это не на «куче» вне главной. – juanchopanza

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