2012-03-01 6 views
1

をセグメンテーション違反: -デバッグexecが正常に動作しますが、通常の一つは、私は次のコードを持っている

void someFunc (someStruct* obj) { 
    cout << obj->some_member; 
} 

someFuncは私が何もコントロールの上に持っていないライブラリから取得コールバックです。これをgdbon = trueでコンパイルすると、生成されたexecはまさしくそのように動作します。 一方、上記のフラグを付けずにコンパイルした場合、execはsegfaultを返します。 GDBにコアダンプを開くには示してい

obj=Variable "obj" is not available. 

私は、問題をさらに絞り込むことができます(または何がおそらく間違っているかもしれない)方法上の任意のアイデアを?

EDIT: - これは問題ではないことが判明しました。安全性の高いメモリアクセスがコードの後半にあり、リリースビルド(最適化を含むもの)が上記のコード行でgdbに問題があるように見えました。

void someFunc (someStruct* obj) { 
    if (obj==NULL) return; 
    cout<<"here1\n"; 
    cout<<obj->some_member; 
    cout<<"here2\n" 
} 

そして、これはランダムに

時々
here1 

here1 
here2 

他のいくつかの時間をもたらすだろう - :本当に驚くべき何 は、私はこれを行うにしようとしたことです。これはちょっとビット再び私を混同... しかし、問題は別の場所だった...

+0

を与えるべきである、私は瞬間のカップル私自身を掲示した後、この優れた質問を見つけました。しかし、助けていないようです。 http://stackoverflow.com/questions/1762088/common-reasons-for-bugs-in-release-version-not-present-in-debug-mode – owagh

+0

objの値を印刷してみてください。すなわちcout << obj。 – akhisp

答えて

1

はValgrindの下で実行してみてください、あなたにいくつかの手がかり

関連する問題