簡體   English   中英

開頭打印的垃圾值是什么原因?

[英]What is the reason for the garbage value printed at the beginning?

我正在編寫一個程序,它將做兩件事

  1. 獲取0到10之間的數字(不包括10,因此值應小於10),將它們分開並存儲在數組中

  2. 打印每個數字的數組

為此,我編寫了一個 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);

}

這是因為您沒有將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內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM