你好我在大學的一次練習中需要用這種方法給malloc一個數組。星星陣列有1個插槽。如果輸入不止一個,那麼數組會翻倍。如果輸入超過2,那麼它會再次翻倍等等。之後,我必須裁剪陣列以適合輸入的數量。例如,如果我有5個輸入,那麼陣列將有8個插槽,我必須讓它有5個插槽,我不知道如何。這是我到目前爲止的代碼:Malloc Realloc免費
nameInfoT* ReadNames(int* size){
nameInfoT* names ;
int array_size=1;
int entries=0;
char input[length];
names=(nameInfoT*) malloc(sizeof(nameInfoT)*array_size);
do{
scanf("%s",input);
if(!strcmp(input,"END")) break;
if(entries==array_size){
array_size=array_size*2;
names= (nameInfoT*) realloc(names,sizeof(nameInfoT)*array_size);
}
names[entries].name=(char*)malloc(sizeof(char)*strlen(input));
strcpy(names[entries].name,input);
entries++;
}while(1);
printf("there are %d free spaces \n",array_size-entries);
*size=entries;
printf("there are %d entries \n",*size);
int i;
for(i=array_size;i>entries;i--){
free(names[i]);//here it won't compile
}
return names;
}
不要施放'malloc's。 – arshajii
不要在'%s「中使用'scanf''!改爲使用'fgets'或POSIX'getline'。出於好奇:你有沒有被教過在你的大學裏使用'scanf'這樣的? – mafso
@mafso是啊...我們認爲它等於fgets或getline – JmRag