我正在尝试重新创建一个简单的字符串类。它仅用于锻炼目的。我的代码完成后,我收到运行时错误。我不太确定,但我认为这是一次内存泄漏。
以下是代码:
*.xsd
答案 0 :(得分:3)
问题在于您的运营商+ =。 您正在连接字符串而不分配所需的空间量。 你的功能应该是这样的:
void operator+= (FITString &drugi) {
char *pomocna = new char[strlen(tekst) + strlen(drugi.tekst) + 1];
strcpy_s(pomocna, strlen(tekst) + 1, tekst);
strcat_s(pomocna, strlen(tekst) + strlen(drugi.tekst) + 1, drugi.tekst);
delete[] tekst;
tekst = pomocna;
}
答案 1 :(得分:2)
如果您正在寻找内存泄漏,operator+
中有一个:最后一行(return pomocna;
)返回char*
而不是声明的FITString
。编译器不会抱怨,因为FITString
有一个'转换构造函数'FITString::FITString(char*)
,它可以用来从返回的FITString
值创建所需的char*
。
问题是,FITString::FITString(char*)
的实现会复制传递的字符串,因此char* pomocna
中分配的operator+
永远不会被删除。
为了避免这种令人困惑的转换,我总是将所有转换构造函数和转换赋值运算符声明为explicit
。