2017-12-09 10 views
-2

「this」はなぜNULLですか? C++のセグメント化エラー

私は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"; 
    } 

} 
をたまたまだだです
+0

どこがクラッシュしますか? – DeiDei

+0

@DeiDei更新。 readInputFile()メソッド内。この行 'input + = line;' –

+0

'BaseAlgorithm'がどこでどのように作成されているかを知らなくても、大したことは言えません。私は自分自身を作ることをお勧めします[mcve]。それが問題の場所と解決方法を表示しない場合は、問題のコードを削除し、MCVEに置き換えてください。 – user4581301

答えて

0

私はそれを修正しました。オブジェクトは遅く作成されていました。

3

C++では、オブジェクトへのヌルポインタを介してメソッドを呼び出すことは完全に可能です。 thisが実際に参照解除されない限り、この関数はうまく動作します。

更新:この動作は、通常、実装によって表示されるものです。thisは、通常、コンパイルされたコードの別のパラメータとして扱われます。しかし、@ manni66が指摘しているように、標準では、nullptrでメソッドを呼び出した結果を実際に要求していません。

+3

これはUBです。この機能はあなたが期待することをするかもしれませんが、保証はありません** –

+0

私は今日とても面白いことを学びました。 –

+0

オブジェクトに仮想関数用のvtableがあると思われる場合は、奇妙なことが起こります。 –

1

myAlgoがNULLのため、thisがNULLであることは明らかです。だからここのタイトルで尋ねられた質問に答えます。

なぜmyAlgoがNULLですか?あなたはそのコードを表示していないため、わかりません。

関連する問題