0

我有一些简单的代码将两个 char[] 合并到一个新数组中。问题是,当我创建新数组时,我想删除在构造函数中分配的原始 char 数组。如果我不在此内存上调用 delete,那么一旦我重新分配 m_str,就会发生内存泄漏。

-Edit 为什么我在调用 delete 时会出错?

String()      { m_str = new char[1]; *m_str = 0; }

String& String::operator+= (const String& other)
{
    unsigned int tmpInt1, tmpInt2;

    tmpInt1 = myStrlen(this->m_str);
    tmpInt2 = myStrlen(other.m_str);

    // Allocate the new char array, make an extra space for the '\0'
    char* newChar = new char[tmpInt1 + tmpInt2 + 1];

    myStrcat(newChar, this->m_str, tmpInt1, 0);
    myStrcat(newChar, other.m_str, tmpInt2, tmpInt1);

    this->m_str[myStrlen(m_str)] = '\0';

    delete[] this->m_str;
    this->m_str = newChar;

    return *this;
}
4

1 回答 1

0

因为泄漏的内存不能用于程序中的其他内容。它将一直使用,直到您关闭程序并且系统可以回收它。

大多数情况下,您想清理它,以便再次使用它,因为内存不是无限资源。

也许对于少量内存,泄漏它不是一个大问题,但是假设您一次分配 256 字节的块,而且很多,那么泄漏这些可能很快就会成为一个问题。

于 2013-02-26T16:40:41.473 回答