我正在尝试将信息从文件导入到结构中,但是当我使用malloc时程序停止运行。我以前做过类似的功能,我不知道为什么不起作用。
这是我的阅读文件功能:
void ler_fich_salas(List_sala sala)
{
FILE *fich;
List_sala l;
char linha[10];
fich = fopen("fich_salas.txt","r");
l = l->next;
if (fich == NULL)
{
return;
}
else
{
/*ou l=l->next*/
while (!feof(fich))
{
printf("A");
fgets(linha, 10, fich);
printf("Z");
printf("%s",linha);/*testar se le bem no fich*/
printf("B");
free(l->nome_sala);
l->nome_sala = (char *)malloc(TAM*sizeof(char));
printf("C");
strcpy(l->nome_sala, strtok(linha,"\n"));
printf("D");
l = l->next;
}
}
fclose(fich);
}
这是我的结构:
typedef struct Sala_node *List_sala;
typedef struct Sala_node
{
char *nome_sala;
List_sala next;
}Cada_sala;
任何帮助将不胜感激!提前谢谢。
答案 0 :(得分:1)
List_sala l;
/* SNIP */
l = l->next;
使用->
运算符时,l
必须是指针类型,这意味着您将指针类型隐藏在typedef
后面,这是一个坏主意。
更有问题的是,您还没有指定它指向逻辑中的任何内容,因此指针值指向 gibberish 。在调用free
之前,您的程序运行起来是一个奇迹,更不用说您声称之后的声明存在问题,因为它试图解除更多的胡言乱语 (没有使用malloc
分配的内容)然后(再次)取消引用并分配给甚至更多的乱码。
您可以将错误的逻辑部分删除以形成MCVE,这样就无法在填空的情况下重现问题 em>(不要这样做)或者......我的猜测是你的书不适合你,因为阅读体面书籍的人往往不会有这种误解;相信我,我去过那里!请参阅this list以查找更好的图书。