[英]What is the reason for the garbage value printed at the beginning?
我正在編寫一個程序,它將做兩件事
獲取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);
}
這是因為您沒有將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.