我正在写我的字符串类版本,当我尝试重载+运算符时,析构函数会在程序执行时触发断点
功能:
String operator+(const String & s, const String & st)
{
int k = s.len + st.len + 1;
char* x = new char[k];
x = s.str;
for (int i = 0, j = k - st.len - 1; j < k; j++, i++)
{
x[j] = st.str[i];
}
return String(x);
}
Run Code Online (Sandbox Code Playgroud)
析构函数:
String::~String()
{
delete[] str;
}
Run Code Online (Sandbox Code Playgroud)
主要:
int main()
{
String x("cos");
String y("cos");
String z = x + y;
std::cout << z;
}
Run Code Online (Sandbox Code Playgroud)
感谢帮助
您用分配了一块内存char* x = new char[k];,然后立即用覆盖了该指针(释放了内存)x = s.str;。然后,for循环将第二个字符串的字符复制到第一个字符串的末尾,可能会在为该字符串分配的内存末尾写入,从而导致未定义行为(调试版本检测到问题时的断点)。
您需要摆脱对x第一个String的分配,并将其复制到x第二个String的操作中。
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |