调试错误,在C++中检测到堆损坏

Debug error, heap corruption detected in C++

本文关键字:检测 损坏 C++ 错误 调试      更新时间:2023-10-16

我在我的一个函数中遇到了问题,

Contact& Contact::operator+=(long long phone)
{
    if (isValidPhonenumber(phone)) {
        long long* tmp = new long long[this->amtNumbers + 1];
        for (int i = 0; i < this->amtNumbers; i++) {
            tmp[i] = this->m_pNumber[i];
        }
        tmp[amtNumbers + 1] = phone;
        delete[] this->m_pNumber;
        this->m_pNumber = tmp;
        this->amtNumbers++;
        return *this;
    }
}

我认为是tmp[amtNumbers + 1] = phone;导致了这种情况。但我不明白为什么?我似乎分配了足够的内存。也许我在this->m_pNumber = tmp;后错过了delete[] tmp;

但即使有,

Contact& Contact::operator+=(long long phone)
{
    if (isValidPhonenumber(phone)) {
        long long* tmp = new long long[this->amtNumbers + 1];
        for (int i = 0; i < this->amtNumbers; i++) {
            tmp[i] = this->m_pNumber[i];
        }
        tmp[amtNumbers + 1] = phone;
        delete[] this->m_pNumber;
        this->m_pNumber = tmp;
        delete[] tmp;
        this->amtNumbers++;
        return *this;
    }
}

我遇到了溢出错误。想法,建议?这是数字类型,而不是字符;我不需要为空字符分配任何额外的内容。

你声明long long* tmp = new long long[this->amtNumbers + 1];,然后使用超出范围的tmp[amtNumbers + 1] = phone;。最大索引this->amtNumbers,因为数组的索引为 0。