我是一個 C 初學者,我試圖撰寫一個 merge_sort 函式。我在下面寫了我的代碼。
變數“array_global”是陣列“a”和陣列“b”之間的合并,所有合并程序都可以正常作業,當函式回傳“全域陣列”時會出現問題,因為它似乎只回傳陣列的第一個元素大批。
例如,如果“array_global”為[19, 26],則接收函式結果的整數指標“a”只接收[19]
我做錯了什么?為什么會發生這種情況?
提前謝謝
int *merge_sort(int array[], int len)
{
if (len == 1)
{
return array;
}
else
{
int l1 = (len/2);
int l2 = len - l1;
int sub_array_1[l1]; int sub_array_2[l2];
for (int i = 0; i<l1; i )
{
sub_array_1[i] = array[i];
}
for (int i = l1; i<len; i )
{
sub_array_2[i-l1] = array[i];
}
int *a = merge_sort(sub_array_1, l1);//Receives array_global value
int a_size = (sizeof(a)/sizeof(int));
int *b = merge_sort(sub_array_2, l2);//Receives array_global value
int b_size = (sizeof(b)/sizeof(int));
int mult = a_size b_size;
int *array_global = malloc(sizeof(*array_global)*mult);
merge(a, b, a_size, b_size, array_global);
return array_global;
}
}
uj5u.com熱心網友回復:
這里的錯誤:
int a_size = (sizeof(a)/sizeof(int));
應該讀
int a_size = l1;
sizeof 不測量堆上陣列的大小。
記憶體泄漏在這里:
return array_global;
應該:
free(a);
free(b);
return array_global;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/395341.html
