c++归并排序函数崩溃
C++ Crashing in mergesort Function
由于某种原因,我的程序在这个mergeSort函数中一直崩溃,该函数的目的只是对数据数组进行合并排序。在本例中,我使用的是字符串数组。
下面是归并排序函数代码:
template <class T>
void Metrics<T>::mergeSort(T *arr, int n)
{
if ( n < 10 )
{
insertionSort(arr,n);
return;
}
int mid = n / 2;
int mid2 = n - mid;
T *Left = new T[mid];
T *Right = new T[mid2];
for ( int i = 0; i < mid; i++ )
{
Left[i] = arr[i];
}
for ( int i = 0; i < mid2; i++ )
{
Right[i] = arr[mid+i];
}
mergeSort(Left, mid);
mergeSort(Right,mid);
merge(Left,mid,Right,mid2,arr);
delete Left;
delete Right;
}
下面是在mergeSort函数中使用的合并函数:
template <class T>
void Metrics<T>::merge(T *a, int numA, T *b, int numB, T *c)
{
int i, j, k;
i = j = k = 0;
while ( i < numA && j < numB )
{
if (a[i] <= b[j])
{
c[k] = a[i];
i++;
k++;
}
else
{
c[k] = b[j];
j++;
k++;
}
}
while ( i < numA )
{
c[k] = a[i];
i++;
k++;
}
while ( j < numB )
{
c[k] = b[j];
j++;
k++;
}
}
我发送到mergeSort函数的初始参数只是一个字符串数组,int n是36。顺便说一下,插入排序代码是这样的:
template <class T>
void Metrics<T>::insertionSort(T *arr, int n)
{
for ( int i = 1; i < n; i++ )
{
int j = i;
while ( j > 0 && arr[j] < arr[j-1] )
{
T temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
j--;
}
}
}
我很确定这与我将字符串数组发送到函数中有关。但它只适用于整数和字符。谢谢!
编辑::看了一下,我认为它崩溃的"删除左"answers"删除右"的代码在合并排序底部。这有什么原因吗?我该怎么修理它?这就是它崩溃的原因吗?
您应该使用delete [] Left
和delete [] Right
来匹配new []
调用。
你也调用mergeSort(Right,mid);
应该是mergeSort(Right,mid2);
,但我不认为这会导致崩溃,只是一个非排序的项目,当n是奇数。
相关文章:
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- C 回调函数在对象 pascal 上崩溃
- 除非使用某些寄存器,否则函数挂钩会崩溃
- Linux c++.在预加载的共享库中定义的基类的崩溃调用函数
- Rcpp 函数在打包时使 RStudio 崩溃
- 使用 MS 绕道挂钩在调用钩子函数时崩溃C++
- 矢量迭代器在尝试调用函数时使我的程序崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 钩/绕道 d3d9 (现在/结束场景) - 似乎调用我的函数然后崩溃
- 程序在为链表创建推送函数时崩溃
- 递归导致程序崩溃,但 while 循环中的相同概念不是来自C++析构函数
- 从 C# 模块调用C++函数引发随机崩溃
- C++设置器函数崩溃
- EGL 在第一次 opengl 函数调用时崩溃
- 我需要做一个空函数循环回来,而不会让它崩溃或跳过
- 当我使用 ALSA lib 的函数"snd_pcm_readi"时它崩溃了
- 在C++中删除指针数组时析构函数崩溃
- 使用向量的函数崩溃,调试器说访问冲突读取位置
- 我的单例中的数组在离开函数后没有保留信息,然后在尝试再次访问信息时崩溃