Ошибка здесь: for (int s2 = 0; s2 < dgw.Columns.Count - 1; s2++)
Удалить -1
или изменить <
на <=
Я не знаю о gcc опции, но необходимо смочь запустить приложение с gdb и затем когда это отказывает, тип where
для взгляда на стек, когда это вышло, который должен получить Вас близко.
$ gdb blah
(gdb) run
(gdb) where
Редактирование для полноты:
необходимо также удостовериться, что создали приложение с флагами отладки при использовании -g
gcc опция включать номера строки в исполняемый файл.
Другая опция состоит в том, чтобы использовать bt
(след) команда.
Вот полная shell/gdb сессия
$ gcc -ggdb myproj.c $ gdb a.out gdb> run --some-option=foo --other-option=bar (gdb will say your program hit a segfault) gdb> bt (gdb prints a stack trace) gdb> q [are you sure, your program is still running]? y $ emacs myproj.c # heh, I know what the error is now...
Счастливое взламывание :-)
Можно заставить gcc печатать Вас stacktrace, когда Ваша программа получает сигнал SEGV, подобный тому, как Java и другие более дружественные языки обрабатывают исключения нулевого указателя. См. мой ответ здесь для получения дополнительной информации:
хорошая вещь об этом - Вы, может просто оставить его в Вашем коде; Вы не должны выполнять вещи через gdb для получения хорошего вывода отладки.
, Если Вы компилируете с-g и следуете инструкциям там, можно использовать инструмент командной строки как addr2line для получения информации файла/строки от вывода.
также необходимо создать с флагами отладки на-g
, можно также открыть дамп ядра с gdb (Вам нужен-g хотя).
Если все предыдущие предложения, чтобы скомпилировать с отладкой (-g) и работать под отладчиком (gdb, работайте, купленный) не работают на Вас, то:
core
) при выполнении gdb иначе Вы запускаете в том же состоянии, не присоединенном к какому-то конкретному образу процесса или отображению памяти. -fstack-protector-all
. Это может быть добавлено к GCC 3.x с патчем. Нет никакого метода для GCC для предоставления этой информации, необходимо будет полагаться на внешнюю программу как GDB.
GDB может дать Вам строку, где катастрофический отказ произошел с "купленным" (короткий для "следа") команда после того, как программа имеет давший сбой seg. Это даст Вам не только строку катастрофического отказа, но и целую стопку программы (таким образом, Вы будете видеть то, что вызвало функцию, где катастрофический отказ произошел).