Я отлаживал segfault в каком-то числовом коде (C ++, никаких зависимостей от каких-либо внешних библиотек).Я получил его, воспроизводящий segfault при компиляции на уровне оптимизации -O0 (с использованием gcc) и запуске в gdb;полученная обратная трассировка:
(gdb) backtrace 2
#0 0x000000000040171c in QExpFloorLog_Q_R (q=Cannot access memory at address 0x7fffff7fefec) at GlobalFunctions.hpp:11
#1 0x0000000000401b50 in MinExponentFromTheoremTwo (q=2, k_q=20 '\024', r=1122053) at GlobalFunctions.hpp:90
Подпись MinExponentFromTheoremTwo:
unsigned char MinExponentFromTheoremTwo(const unsigned int q, const unsigned char k_q, const unsigned int r);
Итак, мой вопрос: что я должен сделать из k_q=20 '\024'
?Я понимаю, что k_q является беззнаковым символом, и поэтому GDB дает мне как числовое значение, так и представление ascii;У меня есть другие места с беззнаковыми переменными char, перечисленными как var1=0 '\000'
, var2=1 '\001'
и т. Д. Но k_q кажется несовместимым со значением 20 и кодом \ 024.Я неправильно понимаю, как используются unsigned char, или это должно помочь мне найти ошибку в моем коде?
Кстати, у меня есть
$ uname -a
Linux clayton-AOD255E 2.6.38-13-generic #53-Ubuntu SMP Mon Nov 28 19:33:45 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
$ g++ --version
g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2
$ gdb --version
GNU gdb (Ubuntu/Linaro 7.2-1ubuntu11) 7.2
Спасибо за любую помощь!