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