내 자신의 문자열 클래스를 작성하려고합니다. 그래서 더 많은 것을 배울 수 있습니다. 그러는 동안 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 가지 규칙을 위반했습니다. (간단한 테스트 케이스를 원했습니다) – judeclarke