私は次の接続を持ついくつかのラベルのテキストを変更しようとしています:セグメンテーションフォールト - C++配列
connect(ui->styleSelector, SIGNAL(currentIndexChanged(int)), this, SLOT(setStyle(int)));
connect(this, SIGNAL(instrumentChanged(QString)), ui->label_inst_1, SLOT(setText(QString)));
connect(this, SIGNAL(instrumentChanged_2(QString)), ui->label_inst_2, SLOT(setText(QString)));
connect(this, SIGNAL(instrumentChanged_3(QString)), ui->label_inst_3, SLOT(setText(QString)));
マイsetStyle
スロット:私のクラスに設定
void SamplerModule::setStyle(int style){
m_style = style;
emit instrumentChanged(m_instruments[m_style][0]);
emit instrumentChanged_2(m_instruments[m_style][1]);
emit instrumentChanged_3(m_instruments[m_style][3]);
}
そして、私の配列を(コンストラクタ)
QString m_instruments[3][3];
m_instruments[0][1] = "Trompette";
m_instruments[0][2] = "Basse";
m_instruments[0][3] = "Piano";
m_instruments[1][1] = "Guitare";
m_instruments[1][2] = "Batterie";
m_instruments[1][3] = "Basse";
m_instruments[2][1] = "Basse";
m_instruments[2][2] = "Batterie";
m_instruments[2][3] = "Guitare";
私はコードを実行しようとしているとき、私は私の信号のためにセグメンテーションフォールトを起こしましたsはm_instruments[x][0]
を使用します。
私は本当に理由を理解していません。私のスロットsetStyle
にはこの配列にアクセスする権利があるので、なぜこのセグメンテーションに誤りがありますか?
詳細:
私は私のヘッダー内のQString m_instruments[3][3];
代わりのQString m_instruments[][3];
を設定した場合は、ワンセグ障害が消えます。 の場合、配列はコンストラクタの外部で空になります。
qDebug() << m_instruments[0][0];
はコンストラクタに "Trompette"を返しますが、setStyle
スロットに ""を返します。あなたのコードで
配列は0でインデックス付けされていることはわかっていますか?したがって、サイズ3の配列は、添字0,1と2を持つ要素を持ちます。このような配列の添字3の要素にアクセスするとエラーになります。 –
私は悪いです、私は何度も、正しいインデックスを戻すことを忘れるすべてを編集しようとしました。これは修正されましたが、セグメンテーションフォルトはまだ存在します。 :/ –
どの値がsetStyle()スロットの引数として渡されていますか? 0,1、または2でない場合は、m_instruments配列の無効なインデックスにアクセスします。 –