2017-02-03 8 views
0

Я пытался отправить решение на вопрос со вчерашнего дня, но все же напрасно. Я получаю ошибку во время выполнения для больших тестовых ящиков. Изучая эту ошибку времени выполнения, я узнал, что она вызвана чрезмерной памятью. У меня есть массив размером <=10^6 и вектор целочисленных пар <=10^12. Должно ли это вызвать переполнение стека, особенно в случае вектора? PS: Я использовал C++ STL много раз, но никогда не сталкивался с переполнением памяти в этих пределах.Когда возникает ошибка времени выполнения SIGABRT и как отлаживается в таких случаях?

+4

* "вектор <= 10^12 целых пар" * Это до 8 ТБ памяти. Вам нужно будет улучшить свой алгоритм. (Или арендуйте какой-то компьютер с таким ОЗУ, но это скорее всего не пункт упражнения.)) –

+0

10^12 целых чисел - 4000 ГБ. – Leandros

+0

Возможный дубликат [Когда процесс получает SIGABRT (сигнал 6)?] (Http://stackoverflow.com/questions/3413166/when-does-a-process-get-sigabrt-signal-6) –

ответ

0

Скорее всего у вас заканчивается память (если ваша система не имеет > 8TB виртуальной памяти) и std::bad_alloc. Необработанное исключение вызовет вызов terminate(), который вызовет abort().

Если вы действительно хотите отладить это, запустить программу под gdb, вы должны увидеть что-то вроде:

Program received signal SIGABRT, Aborted. 

Тогда можно ввести bt, чтобы увидеть трассировки стека.

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

  • Нет связанных вопросов^_^