簡體   English   中英

為什么我的運算符 + 出現分段錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM