我试图将信息从一个文件导入到一个结构中,但是当我使用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;任何帮助都将不胜感激!提前谢谢。
发布于 2017-05-28 10:58:46
List_sala l;
/* SNIP */
l = l->next;从->运算符的使用来看,l必须是指针类型,这意味着您将指针类型隐藏在typedef后面,这不是一个好主意。
更有问题的是,您没有将其赋值为指向逻辑中的任何内容,因此指针值指向胡言乱语。你的程序一直运行到调用free都是一个奇迹,更不用说你声称它后面的语句是有问题的,因为它试图释放更多的胡言乱语(不是使用malloc分配的东西),然后(再一次)取消引用并分配给更多的胡言乱语。
要么你剪掉了错误的逻辑部分来形成一个MCVE,让我们不可能在不填空格的情况下重现问题(不要这么做),要么……我的猜测是,你的书不适合你,因为读过像样的书的人不会有这种误解;相信我,我也经历过!请访问this list找到更好的书。
https://stackoverflow.com/questions/44223350
复制相似问题