2017-08-23 119 views
-2

爲什麼我在這段代碼中得到分段錯誤:11?我的Mac有沒有內存不足?還是有其他原因?我有MacBook Air RAM 8GB。分割錯誤:11在c + +

template<class T> 
class vecto 
{ 
    T *v; 
    int size; 
public: 
    vecto(int m) 
    { 
      size=m; 
      v=new T[m]; 
      for(int i=0; i<size; i++) 
       v[i]=0; 
      cout<<"inside constructor 1."<<endl; 
    } 
    vecto(T *a) 
    { 
      for(int i=0; i<size; i++) 
       v[i]=a[i]; 
      cout<<"inside constructor 2."<<endl; 
    } 
}; 

int main() 
{ 
    int a1[3] = {1,2,3}; 
    float a2[3] = {4,5,6}; 
    vecto<int> v1(3); //constructor 1 called 
    vecto<float> v2(3); //constructor 1 called 
    v1=a1; //constructor 2 called 
    v2=a2; //constructor 2 called 
    return 0; 
} 
+1

***我的Mac有沒有內存不足?***不太可能。 – drescherjm

+6

使用調試器檢查線段發生分段故障。 – nwp

+1

你應該看看使用調試器,它會告訴你觸發它的代碼行,並讓你檢查你的程序狀態(例如看指針或索引是否有意想不到的值) –

回答

1

呼叫

v1=a1; //constructor 2 called 

試圖進行復制,但你有沒有初始化vecto但你不能作爲構造2不知道的「T *一個大小',無論如何,當它完成它會嘗試調用也將失敗的複製構造函數。

改爲使用賦值運算符。

vecto & operator= (const T * a) { 
    for(int i=0; i<size; i++) 
     v[i]=a[i]; 
    std::cout<<"inside copy assign"<<std::endl; 
    return *this; 
}