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*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* 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;
}
プログラムは正しく実行されますが、malloc 呼び出しからメモリを解放しませんでした。実際、free() の配置方法がわかりません。array_right と array_left を解放しようとしましたが、malloc によって直接割り当てられたポインターしか解放できないというエラーが表示されました。
助けてください!よろしくお願いします。