C++ 为什么我的程序在这一行崩溃? #包括 使用名称空间std; 模板 类myset{ 私人: T*pArray; 整数大小; 公众: myset(){ 帕雷=新的T[0]; int size=0; } 无效附加项(T iVal){ 大小++; T*newArray=newt[size];//分配更大的数组// 对于(int i=0;i

C++ 为什么我的程序在这一行崩溃? #包括 使用名称空间std; 模板 类myset{ 私人: T*pArray; 整数大小; 公众: myset(){ 帕雷=新的T[0]; int size=0; } 无效附加项(T iVal){ 大小++; T*newArray=newt[size];//分配更大的数组// 对于(int i=0;i,c++,c++11,C++,C++11,我试图做的是创建任何模板的动态数组。在add函数中,我试图将旧数组复制到新数组中。有人能告诉我为什么它不工作吗?在构造函数中,int size=0正在声明并初始化一个名为size的新局部变量。它不是初始化成员变量myset::size。这意味着当构建myset时,myset::size将包含垃圾。也就是说,它可以从任何值开始 另外,在addItem中,您将项添加到旧数组而不是新数组,然后丢弃指向该数组的指针而不释放其内存,这会导致内存泄漏,新数组只包含垃圾。在构造函数中,int size=0正在

我试图做的是创建任何模板的动态数组。在add函数中,我试图将旧数组复制到新数组中。有人能告诉我为什么它不工作吗?

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


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

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


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

为什么要在ctor中隐藏类的`大小变量?使用调试器时发现了什么?我试图做的是为任何模板创建一个动态数组--只使用
std::vector
有什么不对?甚至还没有删除分配的对象,使用NULL而不是nullptr和int而不是size\u t。为什么要在ctor中隐藏类的` size var?使用调试器时发现了什么?我试图做的是创建一个任何模板的动态数组——只使用
std::vector
有什么错?您甚至没有删除已分配的对象,使用NULL代替nullptr,使用int代替size\t。
#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);
}