析构函数触发断点

Niy*_*iyo -3 c++ breakpoints

我正在写我的字符串类版本,当我尝试重载+运算符时,析构函数会在程序执行时触发断点

功能:

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)

感谢帮助

120*_*arm 5

您用分配了一块内存char* x = new char[k];,然后立即用覆盖了该指针(释放了内存)x = s.str;。然后,for循环将第二个字符串的字符复制到第一个字符串的末尾,可能会在为该字符串分配的内存末尾写入,从而导致未定义行为(调试版本检测到问题时的断点)。

您需要摆脱对x第一个String的分配,并将其复制到x第二个String的操作中。