我有最简单的课文:
class Text
{
char* txt;
public:
Text(const char*);
Text(const Text&);
~Text();
const Text operator+(const Text&) const;
};
和实施:
#include "text.h"
Text::~Text()
{
delete[] this->txt;
}
Text::Text(const char* argText)
{
txt = new char[strlen(argText)+1];
strcpy(txt, argText);
}
Text::Text(const Text& other)
{
txt = new char[strlen(other.txt)+1];
strcpy(txt, other.txt);
}
const Text Text::operator+(const Text& other) const
{
char* ttxt, *newLine;
ttxt = new char[strlen(txt)+strlen(other.txt)+2];
strcat(ttxt, this->txt);
newLine = new char[2];
newLine[0] = '\n';
newLine[1] = '\0';
strcat(ttxt, newLine);
strcat(ttxt, other.txt);
Text temp(ttxt);
delete[] newLine;
return temp;
}
主要:
#include "text.h"
int main()
{
Text a("First text.");
Text b("Second lol!!\n kthxbye!!!!!!!");
Text c(a+b);
}
并且程序中断了newLine = new char[2];
我尝试增加它,例如 new char[5] 但它仍然中断。我收到的信息是:
Windows 已在 prTextClass.exe 中触发断点。
这可能是由于堆损坏,这表明 prTextClass.exe 或其已加载的任何 DLL 中存在错误...