簡體   English   中英

未聲明的數組,在動態內存分配期間首先在函數錯誤中使用

[英]array undeclared ,first used in the function error during dynamic memory allocation

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

1.獲取0到102之間的數字,將其分開並存儲在數組中

2.打印每個數字的數組

為此,我編寫了一個if-else塊,每次將完全根據當前整數值的大小(由稱為num的變量表示)初始化一個數組。

這意味着如果我有一個個位數,它將創建一個由一個元素組成的數組;如果數字為兩位數,則將創建一個由兩個元素組成的數組。但是每當我運行代碼時,我都會得到問題標題中提到的錯誤。

這可能是什么原因以及如何解決此問題?

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int mirror(int num,int *arr,int i);

int main(){
   int num=0,range=1;

   while(num<102){
      if(num<(int)pow(10,range))
      {
          int *arr =(int *)malloc(range*sizeof(int));
      }else{
          range+=1;
          int *arr =(int *)malloc(range*sizeof(int));

      }
      int i = 0;
      mirror(num,arr,i);
      for(i=0;i<range;i++){
         printf("%d ",arr[i]);
      }
      printf("\n");
      num++;
   }
}

int mirror(int num,int *arr,int i){

    if(num == 0){
        return 0;
    }
    arr[i] = num%10;
    mirror(num/10,arr,++i);

}

指針arr的范圍僅在if-else塊內。 因此,它在外部不可用。 在if-else塊之外聲明它,您將可以按需使用它。

      int *arr;

      if(num<(int)pow(10,range))
      {
          arr = malloc(range*sizeof(int));
      }else{
          range += 1;
          arr = malloc(range*sizeof(int));

      }

注意,我已經刪除了malloc()返回值的類型轉換。 它在C語言中是不必要的,並且容易出錯。 請參閱: http//c-faq.com/malloc/mallocnocast.html

數組是if/else語句中的局部變量。 您應該將數組的聲明放在while外部塊中while並將賦值放在條件塊中。

暫無
暫無

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

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