sdr*_*700 0 c++ mergesort dynamic-arrays
我试图读取包含随机数列表的文本文件,并使用mergesort进行排序.数字被读入动态数组.不幸的是,每当我尝试删除未使用的数组时,都会检测到堆损坏错误.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
删除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;
}
Run Code Online (Sandbox Code Playgroud)
问题似乎是你将数组分配为int *tempArr = new int[last].它的元素的数量last和它们的指数0,1...... last - 1.
接近函数的末尾,你有这个:
for(; first2 <= last2; ++first2, ++index)
tempArr[index] = arr[first2];
Run Code Online (Sandbox Code Playgroud)
last2初始化为的值last.这意味着循环中的最终赋值将是何时index == last,因此您正在访问tempArr[last].这超出了数组范围.