你好我在大学的一次练习中需要用这种方法给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