[英]Why do I get a segmentation fault for my operator +?
我有這個簡單的代碼:
vector<double> operator+(const vector<double>& v1, const vector<double>& v2) {
int n = v1.size();
vector<double> a(n);
for(int i = 0; i < n; ++i){
a[i] = v1[i] + v2[i];
}
return a;
}
但是我的調試器顯示存在分段錯誤,我不明白為什么
您的operator+
假設兩個vector
的大小相同。 如果v1
大於v2
,則循環將 go 超出v2
的范圍,導致未定義的行為。
因此,要么驗證大小相等,例如:
vector<double> operator+(const vector<double>& v1, const vector<double>& v2) {
size_t n = v1.size();
if (n != v2.size()) {
throw ...; // or return ...
}
vector<double> a(n);
for(size_t i = 0; i < n; ++i){
a[i] = v1[i] + v2[i];
}
return a;
}
否則,重寫邏輯以支持添加不同大小的vector
,例如:
vector<double> operator+(const vector<double>& v1, const vector<double>& v2) {
size_t v1size = v1.size(), v2size = v2.size();
size_t n = std::min(v1size, v2size);
size_t m = std::max(v1size, v2size);
vector<double> a(m);
for(size_t i = 0; i < n; ++i){
a[i] = v1[i] + v2[i];
}
if (n < m) {
vector<double> &b = (v1size < v2size) ? v2 : v1;
for(size_t i = n; i < m; ++i){
a[i] = b[i];
}
}
return a;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.