如何 return 递归函数中的数组?

How to return an array in a recursive function?

我是 C 初学者,我正在尝试编写一个 merge_sort 函数。我在下面写了我的代码。

变量“array_global”是数组“a”和数组“b”之间的合并,所有合并过程都正常,当函数returns“数组全局”时出现问题,因为它似乎只是 returns 数组的第一个元素。

例如“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;

  }
}

此处错误:

int a_size = (sizeof(a)/sizeof(int));

应该阅读

int a_size = l1;

sizeof 不测量堆上数组的大小。

此处内存泄漏:

return array_global;

应该是:

free(a);
free(b);
return array_global;