Я пытался отправить решение на вопрос со вчерашнего дня, но все же напрасно. Я получаю ошибку во время выполнения для больших тестовых ящиков. Изучая эту ошибку времени выполнения, я узнал, что она вызвана чрезмерной памятью. У меня есть массив размером <=10^6
и вектор целочисленных пар <=10^12
. Должно ли это вызвать переполнение стека, особенно в случае вектора? PS: Я использовал C++ STL много раз, но никогда не сталкивался с переполнением памяти в этих пределах.Когда возникает ошибка времени выполнения SIGABRT и как отлаживается в таких случаях?
0
A
ответ
0
Скорее всего у вас заканчивается память (если ваша система не имеет > 8TB виртуальной памяти) и std::bad_alloc
. Необработанное исключение вызовет вызов terminate()
, который вызовет abort()
.
Если вы действительно хотите отладить это, запустить программу под gdb
, вы должны увидеть что-то вроде:
Program received signal SIGABRT, Aborted.
Тогда можно ввести bt
, чтобы увидеть трассировки стека.
* "вектор <= 10^12 целых пар" * Это до 8 ТБ памяти. Вам нужно будет улучшить свой алгоритм. (Или арендуйте какой-то компьютер с таким ОЗУ, но это скорее всего не пункт упражнения.)) –
10^12 целых чисел - 4000 ГБ. – Leandros
Возможный дубликат [Когда процесс получает SIGABRT (сигнал 6)?] (Http://stackoverflow.com/questions/3413166/when-does-a-process-get-sigabrt-signal-6) –