【问题标题】:array undeclared ,first used in the function error during dynamic memory allocation数组未声明,首次用于动态内存分配时函数报错
【发布时间】:2016-10-16 11:33:55
【问题描述】:

我正在编写一个程序,它将做两件事

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

}

【问题讨论】:

  • arrifelse 块内声明,块完成后将无法访问。

标签: c arrays scope dynamic-memory-allocation


【解决方案1】:

指针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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 2018-10-03
      • 1970-01-01
      • 2015-06-22
      相关资源
      最近更新 更多