在开头打印垃圾值的原因是什么?

时间:2016-10-16 18:00:45

标签: c arrays

我正在编写一个可以做两件事的程序

  1. 得到0到10之间的数字(不包括10,所以值应小于10),将它们分开并将它们存储在数组中

  2. 打印每个数字的数组

  3. 为此,我编写了一个if-else块,它每次都会根据当前整数值的大小来初始化一个数组,该值由num

    变量表示。

    这意味着如果我有一个单个数字,它将创建一个元素的数组,但如果数字长度为两位数,它将创建一个包含两个元素的数组,等等。但每当我运行代码时,我在开头打印一些垃圾值。

    可能是什么原因以及如何解决这个问题?

    enter image description here

    #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);
    
    }
    

1 个答案:

答案 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内存。