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