我正在编写一个可以做两件事的程序
得到0到10之间的数字(不包括10,所以值应小于10),将它们分开并将它们存储在数组中
打印每个数字的数组
为此,我编写了一个if-else块,它每次都会根据当前整数值的大小来初始化一个数组,该值由num
这意味着如果我有一个单个数字,它将创建一个元素的数组,但如果数字长度为两位数,它将创建一个包含两个元素的数组,等等。但每当我运行代码时,我在开头打印一些垃圾值。
可能是什么原因以及如何解决这个问题?
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int mirror(int *arr,int num,int i);
int main(){
int num = 0;
int range = 1;
int *arr;
while(num<10){
int i=0;
if(num<(int)pow(10,range)){
arr=(int *)malloc(range*sizeof(int));
}else{
range+=1;
arr=(int *)malloc(range*sizeof(int));
}
mirror(arr,num,i);
for(i=range-1;i>=0;i--){
printf("%d ",arr[i]);
}
printf("\n");
num++;
}
}
int mirror(int *arr,int num,int i){
if(num == 0){
return 0;
}
arr[i] = num%10;
mirror(arr,num/10,++i);
}
答案 0 :(得分:4)
这是因为你没有在镜像函数中将arr[i]
设置为基本情况中的任何内容。如果没有使用函数的返回值,为什么还要返回任何函数?
要么使它void
,要么你要从中返回值,至少要确保所有控制路径都返回一些值。
正如@JonathanLeffler在下面的评论中所建议的那样:
void mirror(int *arr,int num,int i){
arr[i] = num % 10;
if (num >= 10)
mirror(arr, num / 10, ++i);
}
你可怕地泄漏了记忆。在每次迭代中使用free
内存或使用realloc
并在程序结束时free
内存。