0
我一直在一些數字代碼(C++,不依賴於任何外部庫)調試segfault。在優化級別爲-O0(使用gcc)編譯並在gdb中運行時,我得到它重現segfault;我得到的回溯是:無符號字符的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表示;我有其他地方與無符號字符變量列爲var1=0 '\000'
,var2=1 '\001'
等,但k_q似乎不匹配,值爲20和代碼\ 024。我誤解了如何使用無符號字符,或者這應該幫助我找到我的代碼中的錯誤?
順便說一句,我有
$ 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
感謝任何及所有的幫助!
疑難雜症 - 非常有意義,謝謝! (你回答得太快--5分鐘,直到我可以接受:)) – 2012-03-01 02:24:55