Ote*_*Ote 9 c++ linux qt console-application segmentation-fault
我试图创建一个控制台应用程序,Qt并在尝试检索参数时面临非常奇怪的行为.我的类派生自QCoreApplication哪个函数通常应该将所有args放在某些列表中strings.但在某些情况下,呼叫以分段错误结束.
这是代码:
main.cpp中
#include "Diagramm.h"
int main(int argc, char *argv[])
{
Diagramm application(argc, argv);
application.run();
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
Diagramm.h
#include <QCoreApplication>
#include <iostream>
#include <QStringList>
#include <QFile>
#include <QDebug>
class Diagramm : public QCoreApplication
{
Q_OBJECT
public:
Diagramm(int argc, char *argv[]);
void run();
private:
void testArguments();
signals:
public slots:
};
Run Code Online (Sandbox Code Playgroud)
Diagramm.cpp
#include "Diagramm.h"
Diagramm::Diagramm(int argc, char *argv[]) : QCoreApplication(argc, argv)
{
//std::cout << "calling Diagramm constructor" << std::endl;
}
void Diagramm::run()
{
testArguments();
}
void Diagramm::testArguments()
{
//get source and target files from arguments
QStringList arguments = this->arguments();
if(arguments.count() < 2)
{
std::cout << "Missing arguments" << std::endl;
return exit(1);
}
}
Run Code Online (Sandbox Code Playgroud)
在编译和执行上面的代码时,一切正常,但是当我取消注释Diagramm构造函数中的行时,我在第一行函数testArguments(调用arguments())上遇到了分段错误
我已经上了几个小时,阅读Qt的文档,论坛......有谁知道它可以来自哪里?任何想法将不胜感激.
注意:我没有exec故意调用该函数,因为我不需要任何事件循环.
sca*_*cai 16
Q(核心)申请希望argc和argv 参考,所以你的构造应阅读
Diagramm(int& argc, char **argv[])
Run Code Online (Sandbox Code Playgroud)
如果你不这样做,它可能在某些情况下有效,并导致你遇到的段错误或其他人的奇怪行为.似乎是一个常见的错误,在阅读文档时不容易发现.