使用malloc()时出错

时间:2017-05-28 02:44:41

标签: c struct malloc

我正在尝试将信息从文件导入到结构中,但是当我使用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;

任何帮助将不胜感激!提前谢谢。

1 个答案:

答案 0 :(得分:1)

List_sala l;
/* SNIP */
l = l->next;

使用->运算符时,l必须是指针类型,这意味着您将指针类型隐藏在typedef后面,这是一个坏主意。

更有问题的是,您还没有指定它指向逻辑中的任何内容,因此指针值指向 gibberish 。在调用free之前,您的程序运行起来是一个奇迹,更不用说您声称之后的声明存在问题,因为它试图解除更多的胡言乱语 (没有使用malloc分配的内容)然后(再次)取消引用并分配给甚至更多的乱码

您可以将错误的逻辑部分删除以形成MCVE,这样就无法在填空的情况下重现问题 em>(不要这样做)或者......我的猜测是你的书不适合你,因为阅读体面书籍的人往往不会有这种误解;相信我,我去过那里!请参阅this list以查找更好的图书。