删除数组时出现堆损坏错误
Heap corruption error when deleting array
我正在尝试读取包含随机数列表的文本文件,并使用mergesort对它们进行排序以显示。数字被读入到动态数组中。遗憾的是,每当我尝试删除未使用的数组时,都会检测到堆损坏错误。
合并排序功能:
void mergesort(int *arr, int first, int last)
{
if(first < last)
{
int middle = ((first + last)/2);
mergesort(arr, first, middle);
mergesort(arr, middle+1, last);
merge(arr, first, last);
}
}
删除 tempArr 时合并函数中发生错误:
void merge(int *arr, int first, int last)
{
int *tempArr = new int[last];
int mid = (first+last)/2;
int first1 = first;
int last1 = mid;
int first2 = mid + 1;
int last2 = last;
int index = first1;
for(; (first1 <= last1) && (first2 <= last2); ++index)
{
if (arr[first1] < arr[first2])
{
tempArr[index] = arr[first1];
++first1;
}
else
{
tempArr[index] = arr[first2];
++first2;
}
}
for(; first1 <= last1; ++first1, ++index)
tempArr[index] = arr[first1];
for(; first2 <= last2; ++first2, ++index)
tempArr[index] = arr[first2];
for(index=first;index<=last;++index)
arr[index] = tempArr[index];
delete [] tempArr;
}
问题似乎是您将数组分配为 int *tempArr = new int[last]
。它的元素数量是last
的,它们的索引是0
的,1
,... last - 1
.
在函数的末尾,您有以下内容:
for(; first2 <= last2; ++first2, ++index)
tempArr[index] = arr[first2];
last2
初始化为 last
的值。这意味着循环中的最终分配将是 index == last
时,因此您正在访问 tempArr[last]
。这超出了数组范围。
相关文章:
- 在C++中检测到堆损坏错误
- AMQP-CPP:TCP 处理程序中的管道损坏错误
- 与强制转换相关的堆损坏错误
- 如何修复C ++中的"堆已损坏"错误?
- 双重释放或损坏错误(找不到错误?
- 对于我的类函数,我得到双重释放或损坏错误
- 为什么我的作业操作员给出了损坏错误
- 为什么 delete[] 会导致堆损坏错误
- 为什么我的visual c++在堆栈损坏的情况下没有触发堆栈损坏错误
- c++运行程序时出现堆已损坏错误
- 范围末尾的C 双免费或损坏错误
- Vector访问中出现内存损坏错误
- C 双免费或损坏错误
- 包含链接列表的链接列表给出了堆的损坏错误:原因
- 在Windows上立即检测到堆损坏错误.如何
- 双重释放或损坏错误
- 使用删除 [] 和新(放置)运算符的可视C++堆损坏错误
- 调试 MS VC++ 2005 中的堆损坏错误
- 堆损坏错误;无法发布 cv::Mat opencv
- 使用auto_ptr时出现内存损坏错误