C++ 调试错误,在C++;

C++ 调试错误,在C++;,c++,C++,我在我的一个职能部门遇到了问题 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] =

我在我的一个职能部门遇到了问题

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;
    }
}

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

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

请发布一个。可能我缺少一个delete[]tmp;在此之后->m_pNumber=tmp;?否,添加
delete[]tmp
是错误的,因为您有
this->m_pNumber=tmp
删除tmp将释放
this->m_pNumber
指向的内存。编译器没有警告您没有在所有控制路径中从函数返回值吗
if(isValidPhonenumber(phone))
--如果电话号码无效,您会返回什么?
返回*此应该在if(){}块之后。不在里面。
this->amtNumbers
amtNumbers
相同吗?
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;
    }
}