gpt4 book ai didi

c++ - 删除在另一个函数中分配的内存?

转载 作者:行者123 更新时间:2023-11-27 23:22:27 24 4
gpt4 key购买 nike

所以我刚刚完成了合并排序的实现,但我突然想到我没有删除递归调用返回的内存,我正在丢弃,所以我为 array1 和 array2 添加了 delete 语句,然后突然我的合并排序不起作用.....为什么在我的函数末尾附近添加删除语句会搞砸一切?我需要释放内存吗?

代码如下:

/**
* Runs merge sort on this ArrayList<T>. Interface function to the central,
* recursive, merge sort function.
*/
template<class T>
void ArrayList<T>::mergeSort() {

T* temp = mergeSort(array, size);
delete [] array;
array = temp;
}

/**
* Runs merge sort on the passed in array. Recursive.
*
* @param array the array to sort.
* @param arraySize the size of the array that is to be sorted.
* @return the sorted array.
*/
template<class T>
T* ArrayList<T>::mergeSort(T* array, int arraySize) {

T* returnArray = array;

//If the array is more than one element.
if (arraySize > 1) {

int size1 = arraySize / 2;
int size2 = arraySize - size1;

T* array1;
T* array2;

//Recurse.
array1 = mergeSort(array, size1);
array2 = mergeSort(array + size1, size2);

returnArray = new T[arraySize];

//Loop through all elements in returnArray.
int i = 0, j = 0, k = 0;
while (i < arraySize) {

//Place the lesser of two elements in returnArray.
if ((array1[j] <= array2[k] && j < size1)
|| k == size2) {

returnArray[i] = array1[j];
j++;
}
else {

returnArray[i] = array2[k];
k++;
}

i++;
}

/---这些是有问题的删除!!-----/

        delete [] array1;
delete [] array2;
}

return returnArray;
}

最佳答案

当数组大小等于 2 时,我发现了一个问题因为你打电话

array1 = mergeSort(array, size1);
array2 = mergeSort(array + size1, size2);

和尺寸1=1,尺寸2=1然后这两个调用都将返回,您将在变量中具有以下值

array1 = array;
array2 = array+1;

array2 不是分配的内存地址,因此删除它应该会失败并出现错误或执行未定义的操作,所以我建议在继续之前修复它

关于c++ - 删除在另一个函数中分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11839300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com