発生しているものとしては
Segmentation faultになるのですが
色々デバッグしている中で何とか分かったのは
デストラクタ後にデストラクタが走ったクラスのスロットが動作し続けてしまっています
恐らくデストラクタが走る前に動いていたスロットだと思うのですが
そのせいで破棄されたクラスのオブジェクトにアクセスしようとしてセグ落ちが発生しているのだと思います
ふわふわした情報で申し訳ありません...
クラスが破棄されると同時に、動作中のスロットも停止させることはできないのでしょうか?
よろしくお願いします
##追記
情報が少なく言葉足らずで申し訳ありません...
分かった情報などをまとめさせた頂きます
- 該当スロットはデストラクタが走る前に、呼び出されたもの
- 該当スロットではループの処理をしている、ループ中にデストラクタが走っています
- ループ処理内では
QEventLoop
とQTimer::singleShot
を使ったスリープを使って1秒間隔で処理するようにしてある(個人的にはコレが何か問題を起こしているのかと思っております) - 該当スロットのループ内とデストラクタにログを仕込みましたが、デストラクタのログ後にループのログが確認できているので、デストラクタ後にも動き続けていると判断しました
- 回答に頂いたので、
this
のアドレスをログで出力させたのですが、デストラクタ後に該当スロットループ内のログでセグ落ちが発生しました、破棄されたthis
へのアクセスのせいだと思われるので、私が考えている問題は起きていると思われます - ループ内でローカル変数へのアクセスは問題が起きませんが、メンバ変数へのアクセスをするとセグ落ちが発生します
ここまで書いて、あることに気付いたのですが
そもそもセグ落ちしている関数はスロット内で呼ばれているprivateメンバ関数です...
実質スロットの処理ではあるとは思いますが一応情報だけでも...
また何か状況が変わらないかと思いemit
で該当スロットとコネクトしてあるシグナルを呼び出していたところを、QTimer::singleShot
で動作させてみたのですが状況は変わりませんでした
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/06 00:31
2019/09/09 09:21
2019/09/10 10:17