C ++动态内存释放

时间:2014-10-27 01:57:59

标签: c++ arrays sorting mergesort dynamic-memory-allocation

我在设计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;
}

0 个答案:

没有答案