2015-11-03 6 views
1

Я запустил программу поиска по глубине в C++ для очень большого графика. Dfs записывается рекурсивным образом. Я получил ошибку сегментации 11 на своем ноутбуке, но не могу найти никаких ошибок. Затем я запустил его на сервере linux, он работает нормально.Поведение разлома сегментации на разных машинах

Мне любопытно, в чем разница. Я подозревал размер стека, потому что программа рекурсивна, но когда я проверил: ulimit -a, оба компьютера имеют размер стека 8192 кБ. Я не могу найти другие ограничения, которые могут вызвать эту проблему. Вы знаете, почему я получил разницу? Спасибо!

+2

Запустите его через отладчик/valgrind/и т. Д. –

+0

Вы можете получить разницу, потому что ваша программа может иметь ошибку, которая, как оказалось, работает на одной платформе, а не на другой. Решение состоит в том, чтобы исправить ошибку. Инструменты, предлагаемые Грегором, заслуживают изучения и использования. Я буду размышлять и говорить, что это, вероятно, недопустимый доступ к памяти, такой как ошибка за один раз, использование послезаботки, использование неинициализированной памяти и т. Д. – Adam

+0

Когда один и тот же код действует по-другому, возможно, существует некоторое неопределенное поведение вокруг – Jack

ответ

0

«Ошибка сегментации» является лишь одним из возможных результатов того, что формально определено как «неопределенное поведение».

Существование ошибки сегментации обычно можно заключить как неопровержимое доказательство того, что приложение каким-то образом связано с «неопределенным поведением».

И причина, по которой это называется «неопределенным поведением», заключается в том, что поведение приложения не определено. Фактическое поведение может зависеть от процессора, архитектуры, времени суток, фазы луны или того, кто выиграл World Series. Иногда приложение вылетает с ошибкой сегментации. В других случаях это может закончиться, что, по-видимому, приводит к ожидаемым результатам или, возможно, результатам, которые являются не совсем корректными, в неопределяемом поведении. Вы не можете ожидать какого-либо конкретного поведения от программы, потому что оно не определено.

И это то, что означает «неопределенное поведение». Более известный синоним «неопределенного поведения» - это «ошибка».

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