2012-03-01 58 views
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 

感謝任何及所有的幫助!

回答

2

稱爲二十的數字在基數10中表示爲'20'。在基數8中,它是'24'。 \024是該值的八進制表示。

以下所有的值是相同的:

20  // decimal, base-10 
024 // octal, base-8 
'\024' // octal, base-8 
0x14 // hex, base-16 
+0

疑難雜症 - 非常有意義,謝謝! (你回答得太快--5分鐘,直到我可以接受:)) – 2012-03-01 02:24:55