未知的内存泄漏?

时间:2015-11-11 15:21:38

标签: c++ memory-leaks

我正在尝试重新创建一个简单的字符串类。它仅用于锻炼目的。我的代码完成后,我收到运行时错误。我不太确定,但我认为这是一次内存泄漏。

以下是代码:

*.xsd

2 个答案:

答案 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