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個元素。如果它是空的,它不會擊中使程序崩潰的線。我把空的()檢查放在那裏。 –