我一直在调试一些数字代码中的段错误(C ++,不依赖于任何外部库)。在优化级别-O0(使用gcc)编译并在gdb中运行时,我已经重现了segfault;我得到的回溯是:
(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是一个unsigned char,因此gdb给了我一个数值和一个ascii表示;我将其他地方的无符号字符变量列为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
感谢您的帮助!
答案 0 :(得分:2)
名为20的数字在基数10中表示为“20”。在基数8中,它是'24'。 \024
是该值的八进制表示。
以下所有内容都是相同的值:
20 // decimal, base-10
024 // octal, base-8
'\024' // octal, base-8
0x14 // hex, base-16