为什么"这个"空值? C ++分段错误

时间:2017-12-09 18:20:37

标签: c++ qt segmentation-fault

Debugger output

我正在构建一个Qt应用程序,因为分段错误导致它崩溃。经过调查,我发现了段错的原因是"这个"是NULL,我尝试访问readInputFile(QString路径)方法中的成员变量。 在这一行input += line;

我不明白为什么会这样。怎么能"这个"是NULL?

此处创建对象的位置

void MainWindow::on_inpFileCheck_clicked()
{
    if (ui->inpFileCheck->isChecked()) {
        QString filePath = QFileDialog::getOpenFileName(this,tr("Open CSV file"), "/home", tr("CSV  (*.csv)"));
        myAlgo->readInputFile(filePath);
        ui->inputEdit->clear();
        ui->inputEdit->appendPlainText(myAlgo->getInput());
    }
}

这里是BaseAlgorithm标题

#include "qstring.h"
#include "qmainwindow.h"

class BaseAlgorithm
{
public:
    BaseAlgorithm();
    QString readInputFile(QString);
    int lenArr;

private:
    QString input;
    QString output;
};

这里是实施和问题发生的地方

#include "basealgorithm.h"
#include "qfile.h"
#include "qtextstream.h"

BaseAlgorithm::BaseAlgorithm() {

    numComparisons = 0;
    input = "";
    output = "";
    intArr = NULL;
}

QString BaseAlgorithm::readInputFile(QString path) {

    QFile inpFile(path);
    if (inpFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
        QTextStream in(&inpFile);

        while (!in.atEnd()) {
            QString line = in.readLine();
            input += line; // crash happens here
        }
        return input;
    }

    else {
         return "ERROR";
    }

}

3 个答案:

答案 0 :(得分:3)

在C ++中,完全可以通过指向对象的空指针来调用方法。只要this实际上没有被解除引用,该函数就可以正常工作。

更新:行为是实现经常出现的行为,因为this通常被视为编译代码中的另一个参数。但是,正如@ manni66指出的那样,标准实际上并没有强制要求在nullptr上调用方法的结果。

答案 1 :(得分:1)

很明显this为NULL,因为myAlgo在调用它时是NULL。所以标题中提出的问题已经回答了。

为什么myAlgo为空?我们不知道,因为您没有显示该代码。

答案 2 :(得分:-1)

我修好了。该对象是在晚些时候创建的。