2016-12-18 10 views
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'を持たないので、プログラムがクラッシュします。これをどうやって処理すればいいですか?

答えて

3

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

代わり

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

のあなたが持っていると思います:

if (question != nullptr && question->scaleFrom != nullptr) 
    qDebug() << question->scaleFrom->text(); 
関連する問題