gpt4 book ai didi

c++ - 将元素添加到现有结构会使函数因段错误而崩溃

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:05 24 4
gpt4 key购买 nike

我有以下结构:

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 的输出显示如下:

211个1个1个1个...1

但在崩溃之前永远不会达到 3。

这是怎么回事?即使我从不修改 matches[i].second,也会发生这种情况。

最佳答案

如果您更改结构定义,并且您的构建工具不会自动重建所有受影响的源文件,则您应该重建所有受影响的源文件。否则,您可能会将使用不同结构定义的模块链接在一起,这将导致令人困惑的错误(如您所见)。

关于c++ - 将元素添加到现有结构会使函数因段错误而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12524177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com