我正在构建一个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";
}
}
答案 0 :(得分:3)
在C ++中,完全可以通过指向对象的空指针来调用方法。只要this
实际上没有被解除引用,该函数就可以正常工作。
更新:行为是实现经常出现的行为,因为this
通常被视为编译代码中的另一个参数。但是,正如@ manni66指出的那样,标准实际上并没有强制要求在nullptr
上调用方法的结果。
答案 1 :(得分:1)
很明显this
为NULL,因为myAlgo
在调用它时是NULL。所以标题中提出的问题已经回答了。
为什么myAlgo
为空?我们不知道,因为您没有显示该代码。
答案 2 :(得分:-1)
我修好了。该对象是在晚些时候创建的。