如何 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;
我是 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;