저는 세그먼트 화 오류로 인해 Qt 앱을 빌드 중이며 충돌합니다. 조사가 끝난 후 segfault의 원인은 "this"가 NULL이며 readInputFile (QString path) 메서드에서 멤버 변수에 액세스하려고한다는 것을 알았습니다. 이 라인에 input += line;
왜 이런 일이 일어나는지 이해가되지 않습니다. "this"가 어떻게 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";
}
}
일어나는 곳 어디 여기
입니다
어디에서 충돌이 발생합니까? – DeiDei
@DeiDei 업데이트. readInputFile() 메소드에서. 이 행'input + = line; ' –
'BaseAlgorithm'이 어디서 어떻게 생성되는지 알지 못해도 말하기가 어렵습니다. 나는 너 자신 [mcve]을 만드는 것이 좋습니다. 문제가있는 곳과 문제를 해결하는 방법이 표시되지 않으면 질문의 코드를 제거하고 MCVE로 교체하십시오. – user4581301