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
的外部块中,并将赋值放在条件块中。
这里我正在编写一个程序,它会做两件事
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
的外部块中,并将赋值放在条件块中。