C-免费()带有malloc的保留数据



hi
我写了这个程序,该程序创建了一个由用户提供的书籍列表,我无法在程序结束时释放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 ;
}

首先,在

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]再也无法使用!导致不确定的行为。

相关内容

  • 没有找到相关文章

最新更新