我在设计mergeSort函数的代码时遇到问题,这样我就不会丢失任何内存,但是我现在卡住了,并且陷入了segfaulting。 Valgrind一直指着我动态分配tempArray
的方向,但我没有看到问题,虽然有使用指针,但这应该是内存泄漏的唯一地方。我的代码:
template <typename T>
T* Sorts<T>::mergeSort(T arr[], int size){
int mid=size/2;
T* left=arr+0;
T* right=arr+mid;
if(size==0 || size==1){ //sorted
return arr;
}
T* tmp=merge(mergeSort(left, mid), mergeSort(right, size-mid), mid, size-mid);
for(int i=0; i<size; i++){
arr[i]=tmp[i];
}
}
template <typename T>
T* Sorts<T>::merge(T* left, T* right, int sizeLeft, int sizeRight){
T* tempArray=new T[sizeLeft+sizeRight];
if(left<right){
for(int i=0; i<sizeLeft; i++){
tempArray[i]=left[i];
}
for(int j=sizeLeft; j<(sizeRight+sizeLeft); j++){
tempArray[j]=right[j];
}
for(int k=0; k<(sizeLeft+sizeRight); k++){
left[k]=tempArray[k];
}
}else{
for(int i=0; i<sizeRight; i++){
tempArray[i]=right[i];
}
for(int j=sizeRight; j<(sizeRight+sizeLeft); j++){
tempArray[j]=left[j];
}
for(int k=0; k<(sizeLeft+sizeRight); k++){
left[k]=tempArray[k];
}
}
delete[] tempArray;
return left;
}