void GenerateNativeGamma(vector<float>& gammaNative,
float dDetX,
float sdd,
float moduleGapX,
int nModule,
int nChanDetX)
{
float L = 7*dDetX + (0.78/2+0.11/2);
gammaNative.push_back(0);
for (float n = 6.5; n>=-6.5; n--)
{
gammaNative.push_back(atanf(L/sdd)-atanf(n*dDetX/sdd));
}
gammaNative.push_back(2*atanf(L/sdd));
if(!gammaNative.empty())
{
float lastBonM = gammaNative.back(); // ERROR HAPPENS HERE!!!
gammaNative.push_back(lastBonM +2*atanf(moduleGapX/2/sdd) );
}
......
}
int main()
{
vector<float> gammaNative;
GenerateNativeGamma(gammaNative, 1.02, 869.5, 2.087,47, 24);
}
我正在通过引用将一个向量传入main()
;目的是修改它里面的矢量。vector.back()抛出“偏移量超出范围”错误
然后我就这样“偏移超出范围”的错误时,试图让最后一个元素via vector.back()
像下面的图片显示:
的载体没有空的,所以它应该有一个back()
。那么我不知道这里有什么问题?或者这不是正确的方法,那么我应该如何修改另一个函数内的矢量(动态)?非常感谢。
我能想到的两个原因是:空载体或内存损坏。 –
试着用'float lastBonM = gammaNative.empty()替换错误的行? 0.0f:gammaNative.back();' 这个错误是否仍然发生呢? –
@VioletGiraffe我认为矢量不是空的东西。至少我看到里面有15个元素。如果它是空的,它不会击中使程序崩溃的线。我把空的()检查放在那里。 –