После получения ошибки seg я использовал команду ядра gdb a.out. Впоследствии я использовал backtrace (bt), и это то, что gdb говорит мнеПочему я получаю ошибку seg?
предупреждение: файл ядра может не соответствовать указанному исполняемому файлу.
предупреждения: Ошибка чтения разделяемой библиотеки записи списка на 0xfbe8
предупреждения: Ошибка чтение разделяемой библиотеки записи списка на 0x74c085ff
Ядра было сгенерировано «family.out smith.ged».
Программа завершена сигналом 11, ошибка сегментации.
(poundsign) 0 0x08086a6 в count_records()
(Gdb) Bt
(poundsign) 0 0x080486a6 в count_records()
(poundsign) 1 0x08048906 в __libc_csu_init()
(фунт стерлингов) 2 0xbf85624c in ??()
(moneyign) 3 0xbf856310 in ??()
Backtrace остановился: предыдущий Фрам внутреннего для этого кадра
Может кто-нибудь дать мне некоторое представление о том, что могло вызвать эту ошибку сегментной (коррумпированная стеку?) Обычно gdb дает мне номер строки в программе, но на этот раз это не так.
Скорее всего, вы получили доступ к памяти, которой у вас не было. Помимо этого, вероятно, нужно увидеть код! –
Выход gdb указывает, что вы смотрите на основной файл, сгенерированный другим двоичным кодом. Чтобы отладить ваше приложение, вы можете запустить его внутри gdb (используйте «gdb binary», затем команду «run») или используйте что-то вроде valgrind. – vanza
Определенно используйте valgrind для segfaults. – matzahboy