free()使用malloc保留数据

时间:2017-12-09 00:46:21

标签: c malloc c99

您好我已经写了这个程序,它创建了一个由用户提供的书籍列表,我不能在程序结束时释放my_value并且会出现很多错误。
这是我的代码

#include <stdio.h>
#include <stdlib.h>


int main(){



int n;
printf("Please Enter the Number of Books:\n");
scanf("%d",&n);
char **array=(char *) malloc((n+1)*sizeof(char *));

for(int i=0;i<n;i++){
 array[i] = (char *)malloc(sizeof(char *));
}

for(int i=0;i<n;i++){
char *my_value=(char *) malloc(sizeof(char)*100);
printf("Please Enter the Name of the %dth Book:\n",i+1);
scanf("%s",my_value);
*(array+i)=my_value;
free(my_value);

}

for(int i=0;i<n;i++){
 printf("\n The Book Nr.%d is %s \n",i+1,*(array+i));
}
for(int i=0;i<n;i++){
 free(array[i]);
}
free(array);


return 0 ;
}

1 个答案:

答案 0 :(得分:0)

首先,在

char **array=(char *) malloc((n+1)*sizeof(char *));

您不需要n+1指针,因为您只使用n

然后,这个循环

for(int i=0;i<n;i++){
   array[i] = (char *)malloc(sizeof(char *));
}

是不必要的(也是错误的)。 array[i]将在之后被覆盖。

在下一个循环中

*(array+i)=my_value; // is array[i] = my_value
free(my_value);      // <=== why? remove that line!

你释放了刚刚分配的内容 - array[i]从那时起就不再使用了!导致未定义的行为。