質問

QProcessの呼び出しを含むQT 4アプリケーションをコンパイルしようとしています。

リリースバージョンとしてコンパイルするのは問題ありませんが、デバッグバージョンを実行すると常にSegmentionFaultエラーが発生します。

マイQTバージョンは4.8.2で、FedoraとDebian OSで試してみました。

あなたの誰かが今までに同様の問題を抱えていましたか? 私はそれを理解することができません!

#include <QApplication>
#include "mainwindow.h"
#include <QProcess>

class MyApplication : public QApplication{
public:
    QProcess * proc;
    MyApplication(int argc, char** argv) : QApplication(argc, argv){
        proc = new QProcess();
    }
};

int main(int argc, char *argv[])
{
    MyApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
.

素敵な一日を過ごす Markus

役に立ちましたか?

解決

クラッシュはこの行によって原因:

MyApplication(int argc, char **argv);
.

あなたはそれを変更するべきです:

MyApplication(int &argc, char **argv);
.

理由は、参照なしに、基本的に破壊される一時的なコピーがあり、そのアドレスはまだ保存されています。クラッシュはその後アクセスで行われます。

警告 QApplicationコンストラクタのドキュメント

警告:argcとargvによって参照されるデータは、QCoreApplicationオブジェクトの寿命全体に有効でなければなりません。さらに、argcはゼロより大きくなければならず、argvは少なくとも1つの有効な文字列を含める必要があります。

言われているのは、おそらくあなたの場合にQApplicationをサブクラス化する価値がないです。たとえあなたがしていても、QProcessを使用してバックグラウンドプロセスを処理するために作成されたヒープオブジェクトを削除しないことで、メモリをリークしないようにしてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top