1

から派生しQProcessたクラスでを実行しようとすると、非常に奇妙な問題が発生します。 HmiApplicationQApplication

アプリケーションは の6 行目でSIGSEGVをスローしますmain.cpp。これは、11 行目がコメント アウトされている場合にのみ発生します ( QProcess の stdout を使用hmiapplication.cppしない場合)。qDebug()

わかりやすくするために、QProcess の作成中に戻り値を処理しませんでした。

main.cpp

#include "hmiapplication.h"

int main(int argc, char **argv)
{
    HmiApplication hmi(argc, argv);
    return hmi.exec(); // LINE 6 - SIGSEGV
}

hmiapplication.h

#ifndef HMIAPPLICATION_H
#define HMIAPPLICATION_H

#include <QApplication>
#include <QProcess>

class HmiApplication : public QApplication
{
    Q_OBJECT
public:
    HmiApplication(int argc, char **argv);
    virtual ~HmiApplication();

private:
    QProcess *macFinder = nullptr;
};

#endif // HMIAPPLICATION_H

hmiapplication.cpp

#include "hmiapplication.h"

HmiApplication::HmiApplication(int argc, char **argv) : QApplication(argc, argv)
{
    macFinder = new QProcess(this);
    macFinder->start("arping", QStringList() << "-c 2" << "192.168.1.1");
    macFinder->waitForReadyRead();
    QString ret(macFinder->readAllStandardOutput());
    ret = ret.mid(ret.indexOf('[') + 1, 17);
    qDebug() << ret; // LINE 11
}

HmiApplication::~HmiApplication()
{
}

編集:QVector<Camera*> cameras;ヘッダー に追加して

for(quint8 i = 0; i < 10; i++) {
    Camera *cam = new Camera(i);
    cameras.append(cam);
}

ソース ファイルに対して、行を削除するかどうかは問題ではなくqDebug()、どちらの場合もセグメンテーション エラーがスローされます。

Cameraの派生クラスであり、上記QLabelのものがなくても完全に機能します。QProcess

4

1 に答える 1