2009-11-06 4 views
0

Кто-то, пожалуйста, посмотрите мой код на этом link для ввода взятого из этого file (файл 2.2 mb). Это вызывает сегрегацию. По gdb он показывает ошибку seg в _vfprintf_r(). Но когда я комментирую строку 41 и раскомментирую 38 (нулевой оператор), нет ошибки сегментации. строка № 41 - это только оператор печати. Кто-то, пожалуйста, помогите. Я напуган и трачу день на отладку. Результат записывается в файл result.txt.Незначительная ошибка сегментации C++ in _vfprintf_r()

+0

Каков результат, если вы напечатаете f ("% d \ n", v)? – Blair

+0

Тогда также seg ошибка. – avd

+0

Если бы вы могли предоставить трассировку стека из gdb, это было бы замечательно. Я скопировал его точно так же, как у вас есть на кодовом коде, скомпилировал его, схватил ваш файл randomin2.txt и отлично работал (182350 line result.txt). – Matt

ответ

4

У вас переполнение стека. Правильно, переполнение стека. Я смог воспроизвести, выполнив ulimit -s 1024. Вам не нужно так много рекурсивно, или вам нужно увеличить размер стека.

+0

Как увеличить размер стека? Но вы не получили ошибку, и написал в комментарии. – avd

+0

Его простой dfs около 200000 вершин. Файл задает график. Я должен представить его онлайн-судье. Как это сделать? – avd

+0

Первоначально я не получил ошибку. Я опустил размер стека и смог воспроизвести ошибку. Вы можете попробовать ulimit -s (моя система по умолчанию 8192), чтобы попытаться решить проблему, но я не уверен, поддерживает ли cygwin размер стека. Размер стека 2048 не вызвал ошибку. – Matt

0

Как ответил Мэтт, у вас заканчивается стопка. Добавить /STACK: сумма резервирования в байтах, сумма для первоначальной фиксации в байтах в вашей командной строке link.exe.

Убедитесь, что оба номера кратных 4096, что является размером страницы по умолчанию на окнах IIRC.

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