[英]Malloc function (dynamic memory allocation) resulting in an error when it is used globally
[英]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.