您好我已经写了这个程序,它创建了一个由用户提供的书籍列表,我不能在程序结束时释放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 ;
}
答案 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]
从那时起就不再使用了!导致未定义的行为。