使用模板时发生C ++分段错误11

时间:2018-07-27 20:59:52

标签: c++ segmentation-fault

我刚开始使用c ++模板,其中我创建了一个模板平方函数,一个模板MyVector类,并覆盖了MyVector类的乘法运算符。

我在对MyVector对象进行平方处理时遇到了问题,即square(bv)出现分段错误11的故障。 欢迎任何帮助或指点。

我在Mac OS上,使用g ++进行编译

  

使用以下命令配置--prefix = / Library / Developer / CommandLineTools / usr --with-gxx-include-dir = / usr / include / c ++ / 4.2.1   Apple LLVM版本9.1.0(clang-902.0.39.2)   目标:x86_64-apple-darwin17.7.0   线程模型:posix

#include <iostream>
using namespace std;

template <typename T>
T square(T x){
    return x*x;
}
//Template has a side effect of code bloat, 
//i.e. both the datatypes will have a different code sections
//Template Class
template <typename T>
class MyVector{
    T arr[100];
    int size;
public:
    MyVector():size(0){}
    void push(T x){ arr[size]=x; size++;}
    T get(int i) const {return arr[i];}
    int getSize() const { return size;}
    void print() const { for(int i=0;i<size;i++){cout<<arr[i]<<endl;}}
};
//Template Operator multiply for MyVector
template <typename T>
MyVector<T> operator* (const MyVector<T>& rhs1, MyVector<T>& rhs2){
    MyVector<T> ret;
    for(int i=0; rhs1.getSize();i++){
        ret.push(rhs1.get(i)*rhs2.get(i));
    }
    cout<<"In BV Squared"<<endl;
    ret.print();
    return ret;
};
int main(){
    // cout<<square(5)<<endl;
    // cout<<square(5.5)<<endl;
    cout<<square<int>(5)<<endl;
    cout<<square<double>(5.5)<<endl;
    MyVector<int> bv;
    bv.push(1);
    bv.push(2);
    bv.push(8);
    bv.push(9);
    bv.print();

    cout<<"Squared bv:"<<endl;
    bv = square(bv);
    bv.print();
    return 0;
}

1 个答案:

答案 0 :(得分:2)

函数模板MyVector<T> operator* (const MyVector<T>& rhs1, MyVector<T>& rhs2)中的循环不变式不正确。更改

for(int i=0; rhs1.getSize();i++)

for(int i=0; i < rhs1.getSize();i++)
             ^^^^