这是我的代码,递归操作应该创建数组3,(动态)并从数组1中取出一个字母,从数组2中取出第二个字母,直到其中一个数组结束.这对我来说很有效,但是当我试图释放第三个动态创建的数组时,我得到了一个错误消息,代码是:
void Mirage(char list1[], char list2[], char list3[], int m, int n);
int main()
{
char array[7] = { 'a','b','c','d','e','f','g' };
char array2[3] = { 'T','Z','W' };
char *array3 =(char*) malloc(sizeof(array)+sizeof(array2));
Mirage(array, array2, array3, 7, 3);
printf("%s", array3);
free((void*)array3);
}
void Mirage(char list1[], char list2[], char list3[], int m, int n)
{
if ((m <= 0) && (n <= 0)){
list3[m + n] = 0;
return;
}
else if (m >= 0 && n <= 0)
{
list3[0] = list1[0];
Mirage(list1 + 1, list2, list3 + 1, m - 1, n);
}
else if (m <= 0 && n >= 0)
{
list3[0] = list2[0];
Mirage(list1, list2+1, list3 + 1, m, n-1);
}
else
{
list3[0] = list1[0];
list3[1] = list2[0];
Mirage(list1 + 1, list2 + 1, list3 + 2, m - 1, n - 1);
}
}
错误:x1c 0d1x
为什么我会得到它?非常感谢!
1条答案
按热度按时间kkbh8khc1#
您将把数组
array3
输出为包含一个字符串但您没有为数组
array3
中的终止零字符'\0'
保留空间你必须写
该函数应声明为
也就是说,参数
list1
和list2
应该有限定符const
,因为数组在函数中没有改变。并且数组的大小应该有size_t
类型。该函数可通过以下方式定义
free
的调用可以写得更简单