いくつかの数値コードでセグメンテーションをデバッグしています(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
感謝を持っています!
ガッチャ - 完璧な理にかなって、ありがとう! (あなたはあまりにも早く答えました - 私が受け入れることができるまで5分) –