C中递归子程序的内存释放
我想问一个关于在C中释放内存的问题。我正在实现mergeSort函数,如下所示: 合并子例程:C中递归子程序的内存释放,c,malloc,free,mergesort,C,Malloc,Free,Mergesort,我想问一个关于在C中释放内存的问题。我正在实现mergeSort函数,如下所示: 合并子例程: int* merge (int* array_left, unsigned int left_length, int* array_right, unsigned int right_length) { unsigned int result_size = right_length + left_length; int* result = malloc(result_size*siz
int* merge (int* array_left, unsigned int left_length, int* array_right, unsigned int right_length) {
unsigned int result_size = right_length + left_length;
int* result = malloc(result_size*sizeof(int));
int r = 0; // result index
// Iterate through all left and right array elements
int i = 0; // left index
int j = 0; // right index
while ( (i < left_length) && (j < right_length) ) {
if ( *(array_left+i) < *(array_right+j) ) {
*(result+r) = *(array_left+i);
i++;
} else {
*(result+r) = *(array_right+j);
j++;
}
r++;
}
// Fill the remaining elements to the result
if (i < left_length)
while (i < left_length) {
*(result+r) = *(array_left+i);
r++;
i++;
}
if (j < right_length)
while (j < right_length) {
*(result+r) = *(array_right+j);
r++;
j++;
}
return result;
}
int*合并(int*数组左、无符号int左、int*数组右、无符号int右){
无符号整数结果大小=右长度+左长度;
int*result=malloc(result_size*sizeof(int));
int r=0;//结果索引
//遍历所有左右数组元素
int i=0;//左索引
int j=0;//右索引
而((i
合并排序:
int* mergeSort(int* array, unsigned int length) {
// Base case
if (length <= 1)
return array;
// Middle element
unsigned int middle = length / 2;
int* array_right = mergeSort(array, middle);
int* array_left = mergeSort(&array[middle], length-middle);
// Result is merge from two shorted right and left array
int* result = merge(array_left, length-middle, array_right, middle);
return result;
}
int*合并排序(int*数组,无符号整数长度){
//基本情况
如果(长度您需要添加
free(arrayLeft);
free(arrayRight);
以及malloc和复制数组,即使其长度在mergeSort中为1:
int* mergeSort(int* array, unsigned int length) {
// Base case
if (!length) return NULL;
if (length == 1) {
// Make a copy of a single-element array
int *tmp = malloc(sizeof(int));
*tmp = *array;
return tmp;
}
... // The rest of your code
}
这将确保mergeSort的调用方始终拥有它所返回的数组,因此他必须在所有情况下释放它
当你尝试它时,它不起作用的原因是你没有复制普通数组,这导致了其中一些数组的双重释放。谢谢你,你能给我更具体的代码吗?我不明白你所说的“复制trivival数组”和“调用者拥有它得到的数组”是什么意思。@Hoangt当然要看一看“拥有”阵列我的意思是“需要释放”。