私は自分自身の文字列クラスを作成しようとしています(詳細は覚えています)。その間、charデータがどのように削除されているか、プログラムは文字列のデストラクタが呼び出されます閉じてたときにそこにデータ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);
}
あなたは一つのアイテムが少なすぎる、strcpyのコピーNUL終端バイトを割り当てている
削除する前にNULLをテストする必要はありません(または値を0に設定する必要はありません)。 –
あなたは3つのルールに従う必要があります。そうしないと、最初のコピーの後にクラッシュします。 –
あなたは正しいです、私は3つのルールに違反していました(私は単純なテストケースを持っていました) – judeclarke