C++ char类函数append

问题描述 投票:0回答:1
void CMPT135_String::append(const CMPT135_String &s) /*12*/
{
    char *temp = new char[this->getLength()+1];

    int len = CMPT135_String::cstrlen(buffer);

    for (int i =0; i < len; i++)
        temp[i] = this->operator[](i);

    for (int i = 0; i < s.getLength()+1; i++)
        temp[len+i] = s[i];

    if(this->getLength() >0) 
        delete[] this->buffer;

    this->buffer = temp;
}

我一直在与这个 append() 自定义字符串类的成员函数。

该函数工作正常,但运行后我得到一个弹出窗口。

Windows在CMPT135_Assignment1.exe中触发了一个断点。

这可能是由于堆的损坏,这表明Assignment1.exe或其加载的任何DLLs中存在错误。

这也可能是由于用户在CMPT135_Assignment1.exe有焦点时按了F12。

输出窗口可能有更多的诊断信息。

请告诉我这是什么问题。

c++ function class append member
1个回答
1
投票

你没有为新的缓冲区分配足够的内存。 你只分配了足够的内存来复制 this->getLength() 字数 this,没有空间也复制 s.getLength() 字数 s 到新的缓冲区中,所以你的第二个循环正在破坏新缓冲区末端的随机内存。

试试像这样的方法吧。

void CMPT135_String::append(const CMPT135_String &s) /*12*/
{
    int this_len = this->getLength();
    int s_len = s.getLength();
    int new_len = this_len + s_len;

    char *temp = new char[new_len + 1];

    for (int i = 0; i < this_len; ++i)
        temp[i] = this->operator[](i);

    for (int i = 0; i < s_len; i++)
        temp[this_len + i] = s[i];

    temp[new_len] = '\0';

    delete[] this->buffer;
    this->buffer = temp;
}
© www.soinside.com 2019 - 2024. All rights reserved.