array undeclared , first used in the function error during dynamic memory allocation 数组未声明,首次用于动态内存分配期间的函数错误

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

这里我正在编写一个程序,它会做两件事

1.get0到102之间的一个数,将它们分开存入数组

2.print每个数字的数组

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

的变量表示

意思是,如果我有多个个位数,它将创建一个包含一个元素的数组,如果数字是两位数长,它将创建一个包含两个 element.But 的数组,只要我 运行代码我得到问题标题中提到的错误。

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

#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() return 值的转换。它在 C 中是不必要的,而且容易出错。参见:http://c-faq.com/malloc/mallocnocast.html

数组是if/else语句中的局部变量。您应该将数组声明放在 while 的外部块中,并将赋值放在条件块中。