调试错误,在C++中检测到堆损坏
Debug error, heap corruption detected in 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] = 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。
相关文章:
- 检测到堆损坏:在正常块 c++ 动态 2D 数组之后
- 删除字符串后C++检测到堆损坏
- 检测到堆损坏(字符串导致堆损坏)|C++
- 在C++中检测到堆损坏错误
- C++ 内存损坏检测
- 如何修复检测到堆损坏:正常阻止后
- 在复制 delete[] 数组后在 C++ 中检测到堆损坏
- 从检测到 glibc 正常退出 - malloc():内存损坏
- 编译器如何检测内存损坏
- 排序程序的错误(检测到堆损坏)
- 正常块错误后检测到的堆损坏
- C++ 删除数组时检测到堆损坏
- 调试错误,在C++中检测到堆损坏
- 检测到堆损坏(类方法)
- 在普通块(#164)之后检测到堆损坏
- jemalloc未检测到内存损坏
- 检测到合并排序堆损坏
- 错误: *** 检测到 glibc *** w5:双重释放或损坏(快速顶部):
- 检测到堆损坏:在正常块(#62)之后
- 在Windows上立即检测到堆损坏错误.如何