为什么我的程序崩溃在这一行?

时间:2017-05-26 02:32:24

标签: c++ c++11

#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);
}

我要做的是制作任何模板的动态数组。在我的添加功能中,我正在尝试将旧数组复制到我的新数组中。谁能告诉我它为什么不起作用?

1 个答案:

答案 0 :(得分:3)

在构造函数中,int size =0;声明并初始化一个名为size的新局部变量。它不是初始化成员变量myset::size。这意味着构建myset时,myset::size将包含垃圾。即它可以从任何价值开始。

此外,在addItem中,您将项添加到旧数组而不是新数组,然后丢弃指向该数组的指针而不释放其内存,这会导致内存泄漏并且新数组包含只是垃圾。