0

多数の「質問」オブジェクトを作成し、それらをベクトル内に保存しました。オブジェクトに特定の機能が含まれている場合は、ベクトルをループしてインデックスで何かをしたいと考えています。これらは私が持っている種類のもので、一部のオブジェクトはこれらの配置が異なります。

QLabel *titleLabel;
QTextEdit *textEdit;
QLineEdit *lineEdit;
QLabel *commentsLabel;
QTextEdit *commentsEdit;
QLineEdit *option;
QLabel *scaleLabel;
QLabel *label;
QLineEdit *scaleFrom;
QLineEdit *scaleTo;

インデックスのオブジェクトに特定のものがない場合、コードがクラッシュします。

質問 *質問;

for(int i = 0; i< question_vector.size(); i++){

   question = question_vector[i];

   if(question->scaleFrom)
   {
       qDebug() << question->scaleFrom->text();
   }
    else
   {
       qDebug() << "no";
   }
}

インデックス 0 のオブジェクトには「scaleFrom」がないため、プログラムがクラッシュします。これを処理してスキップするにはどうすればよいですか?

4

1 に答える 1

3

ポインターを逆参照しています。有効なメモリ アドレスを指している必要があります。オブジェクトに何かがない場合、それらのポインターは NULL または nullptr (C++11) に設定されるので、それらが == から null であるかどうかを確認できます。その後、ポインターを逆参照する前に、ポインターが null かどうかを確認できます。

それ以外の

qDebug() << question->scaleFrom->text();

あなたが持っているでしょう:

if (question != nullptr && question->scaleFrom != nullptr)
    qDebug() << question->scaleFrom->text();
于 2016-12-18T21:06:24.390 に答える