我正在尝试将信息从文件导入到结构,但是当我使用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;
任何帮助将不胜感激!预先感谢。
List_sala l;
/* SNIP */
l = l->next;
从使用->
运算符的使用中,l
必须是指针类型,这意味着您将指针类型隐藏在typedef
后面,这是一个坏主意。
更有问题的是,您尚未将其分配给逻辑中的任何内容,因此指针值点 gibberish 。这是您的程序一直延续到free
的奇迹,更不用说声明您声称有问题的声明,因为这是试图批准的 More Gibberish (没有使用malloc
分配的东西(和然后(再次(解雇并分配给更多的gibberish 。
您是否将逻辑的错误部分切开以形成MCVE,从而使我们能够在没有填充空白的情况下重现问题不可能的(不要这样做(或...我的猜测是您的书对您不起作用,因为阅读体面书籍的人往往不会误解这种误解。相信我,我去过那里!请参阅此列表以找到一本更好的书。