私は次の構造体を持っています:
struct FeatureMatch {
int id1, id2;
double score;
};
この関数によって呼び出されたときに正常に実行されます。
void ssdMatchFeatures(const FeatureSet &f1, const FeatureSet &f2, vector<FeatureMatch> &matches, double &totalScore) {
int m = f1.size();
int n = f2.size();
matches.resize(15000);
totalScore = 0;
double d;
double dBest;
int idBest;
printf("2");
for (int i=0; i<m; i++) {
dBest = 1e100;
idBest = 0;
for (int j=0; j<n; j++) {
d = distanceSSD(f1[i].data, f2[j].data);
if (d < dBest) {
dBest = d;
idBest = f2[j].id;
}
}
printf("1\n");
matches[i].id1 = f1[i].id;
matches[i].id2 = idBest;
matches[i].score = -dBest;
// matches[i].second=1;
totalScore += matches[i].score;
}
printf("3");
}
ただし、新しい要素を追加して構造体を変更するとすぐに:
struct FeatureMatch {
int id1, id2;
double score, second;
};
second と呼ばれる追加の double 値により、セグメンテーション エラーで上記の関数がクラッシュします。1,2,3 の出力は次のようになります。
21 1 1 1 1 . . . 1
しかし、クラッシュする前に 3 に到達することはありません。
ここで何が起こっているのですか?match[i].second をまったく変更しない場合でも、これは発生します。