2012-03-01 8 views
0

いくつかの数値コードでセグメンテーションをデバッグしています(C++、外部ライブラリに依存しません)。最適化レベル-O0(gccを使用)でコンパイルしてgdb内で実行するとsegfaultが再現されます。私が手にバックトレースがある:gdbのunsigned char表現は矛盾していますか?

(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が符号なしのcharであることを理解しているので、gdbは数値とascii表現の両方を与えてくれます。私はvar1=0 '\000'var2=1 '\001'などのように署名されたchar変数を持つ他の場所を持っています。しかし、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 

感謝を持っています!

答えて

2

20と呼ばれる数字は、基数10で '20'と表されます。ベース8では24です。 \024は、その値の8進表現です。

次のすべてが同じ値です:

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

ガッチャ - 完璧な理にかなって、ありがとう! (あなたはあまりにも早く答えました - 私が受け入れることができるまで5分) –

関連する問題