我在C++中编写了一个基本的合并排序代码。当我在函数merge()中运行下面的代码时,我得到变量b的堆栈损坏异常。我无法弄清楚我做错了什么。任何帮助非常感谢!合并排序 - 堆栈损坏错误
这是我的代码:
template <class T>
class mSort
{
void mergeSort(T *a, int low, int high);
void merge(T *a, int low, int mid, int high);
public:
mSort(T* a, int size);
};
template<class T>
mSort<T>::mSort(T *a, int size)
{
mergeSort(a, 0, size);
}
template<class T>
void mSort<T>::mergeSort(T *a, int low, int high)
{
int m;
if (low < high)
{
m = (low + high)/2;
//printf("mergeSort:low[%d], mid [%d], high [%d]\n", low, m, high);
mergeSort(a, low, m);
mergeSort(a, m+1, high);
merge(a, low, m, high);
}
}
template<class T>
void mSort<T>::merge(T *a, int low, int mid, int high)
{
int b[20];
int i = low, j = mid + 1, k = 0;
while (i <= mid && j <= high) {
if (a[i] <= a[j])
b[k++] = a[i++];
else
b[k++] = a[j++];
}
while (i <= mid)
b[k++] = a[i++];
while (j <= high)
b[k++] = a[j++];
k--;
while (k >= 0) {
a[low + k] = b[k];
k--;
}
}
输入数组: INT A [20];
#define prep_intput_array(a,n)\
for (int i = 0; i < n; i++)\
{\
a[i] = rand() % 65535;\
}\
调用合并排序过程是这样的:
mSort<int> m1(a, 20);
代码是基于合并排序在这个link
啊非常感谢,这是问题所在。将其更改为size-1,现在堆栈损坏消失了!!没有足够的代表投票您的答案了:( – vinit