为什么我在删除char时遇到内存异常*

jud*_*rke 2 c++ memory string algorithm memory-management

我正在尝试编写自己的字符串类(所以我可以学到更多),同时这样做我注意到我遇到了如何删除char数据的问题,当程序关闭时,字符串的析构函数将被调用并且将会删除数据时出现堆错误

#include <string.h>

template<typename T>
class String
{
protected:
    T* mData;

public:
    String(const T* data);
    ~String();
};

template<typename T>
String<T>::String(const T* data)
{
    if(data != NULL)
    {
        mData = new T[strlen(data)];
        strcpy(mData, data);
    }
}

template<typename T>
String<T>::~String()
{
    if(mData != NULL)
    {
        delete [] mData;
        mData = 0;
    }
}

int main(void)
{
    String<char> Test("Test");

    return(0);
}
Run Code Online (Sandbox Code Playgroud)

jco*_*der 5

 mData = new T[strlen(data)];
        strcpy(mData, data);
Run Code Online (Sandbox Code Playgroud)

您分配的项目太少,strcpy复制nul终止字节以及字符串