bool
という属性を持つクラスがglobal
とあります。オブジェクトがその属性の1つにアクセスしようとするたびにSegfaultを送信する可能性はありますか?
外部からそのメソッドの1つを呼び出すときにセグメンテーションエラーが発生しました。
基本的に、私はこのメソッドを呼び出します。このメソッドは内部的に別のメソッドを呼び出します。このメソッドは別のメソッドなどを呼び出します(これは、それぞれのメソッドが少し複雑になるためです)。
メソッド呼び出しチェーンの最後に、属性global
をチェックし、その内容に基づいて異なる方法を実行するメソッドがあります。
gdbを使用するこの最後の方法では、正確な行if (global) {
でセグメント化エラーが生成されていることがわかりました。私は、メソッドチェーン内でこの条件チェックを上げようとしましたが(メソッドチェーン内で深く続ける前に条件がチェックされるように)、結果は変わりません(つまり、どこに置かれても、常にif (global) {
はセグメンテーションフォールト)。
属性global
をチェックすると、セグメント違反が発生する可能性はありますか?これはどういう意味ですか?この原因は何ですか?
私はg++ -std=c++11 -Wall -Wextra -pedantic -g
でコンパイルしています。
Re: "これは何が原因ですか?" - あなたのコードに誤りがあります。それを見つける方法は、問題がなくなるまでコードを削除し、最後に削除したビットを追加し、問題が解決しなくなるまで他のものを削除し続けることです。完了するまで繰り返す。コードをコンパイルして実行し、問題を示すことができる最小のプログラムまでコードを取得したら、何が間違っているのかを把握することができます。そうでない場合は、最小限のプログラムを投稿してください。 –
私は、クライアントがオブジェクトポインタを介してメソッドを呼び出すと予測します。オブジェクトポインタはNULLか無効です。このプログラムは、 'this'が実際にオブジェクトのデータメンバにアクセスするために初めて使用されたときにクラッシュします。 –
segフォルトが表示されている場合は、コンパイルフラグとリンクフラグに '-fsanitize = address'を追加してみてください。 *なぜ* segフォールトが発生するのかについての詳細が表示されます。 –