2017-05-26 117 views
0
#include <iostream> 

using namespace std; 

template <class T> 
class myset{ 
private: 
    T *pArray; 
    int size; 

public: 
    myset<T>(){ 
     pArray = new T[0]; 
     int size =0; 
    } 

    void addItem(T iVal){ 
     size++; 
     T* newArray = new T [size];// allocate bigger array // 
     for(int i=0; i< size-1; i++){ 
      newArray[i] = pArray[i]; // IT IS CRASHING BECAUSE OF THIS LINE 
     } 
     pArray[size -1] = iVal; 
     pArray = NULL; 
     pArray = newArray; 
    } 
}; 

int main() 
{ 
    myset<int> a; 
    myset<double> d; 
    a.addItem(3); 
    a.addItem(5); 
} 

我想要做的是製作任何模板的動態數組。在我的add函數中,我試圖將我的舊數組複製到我的新數組中。誰能告訴我爲什麼它不起作用?爲什麼我的程序在這一行中崩潰?

+1

你爲什麼在ctor中隱藏你的類的'size var? –

+2

你使用調試器時發現了什麼? –

+4

*我想要做的是製作任何模板的動態數組* - 剛剛使用'std :: vector '有什麼問題? – PaulMcKenzie

回答

4

在構造函數中,int size =0;正在聲明並初始化一個名爲size的新局部變量。它不初始化成員變量myset::size。這意味着當myset被構建時,myset::size將包含垃圾。即它可以從任何值開始。

另外,在addItem中,您將該項添加到舊數組而不是新數組中,然後放棄指向該數組而不釋放其內存的指針,這會導致內存泄漏,並且新數組只包含垃圾。