から派生しQProcess
たクラスでを実行しようとすると、非常に奇妙な問題が発生します。 HmiApplication
QApplication
アプリケーションは の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