首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用malloc()时出错

使用malloc()时出错
EN

Stack Overflow用户
提问于 2017-05-28 10:44:41
回答 1查看 49关注 0票数 0

我试图将信息从一个文件导入到一个结构中,但是当我使用malloc时,程序停止运行。我以前也做过类似的函数,我不知道为什么不能工作。

这是我的读取文件函数:

代码语言:javascript
运行
复制
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);
}

这是我的结构:

代码语言:javascript
运行
复制
typedef struct Sala_node *List_sala;
typedef struct Sala_node
{
    char *nome_sala;
    List_sala next;
}Cada_sala;

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

EN

回答 1

Stack Overflow用户

发布于 2017-05-28 10:58:46

代码语言:javascript
运行
复制
List_sala l;
/* SNIP */
l = l->next;

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

更有问题的是,您没有将其赋值为指向逻辑中的任何内容,因此指针值指向胡言乱语。你的程序一直运行到调用free都是一个奇迹,更不用说你声称它后面的语句是有问题的,因为它试图释放更多的胡言乱语(不是使用malloc分配的东西),然后(再一次)取消引用并分配给更多的胡言乱语。

要么你剪掉了错误的逻辑部分来形成一个MCVE,让我们不可能在不填空格的情况下重现问题(不要这么做),要么……我的猜测是,你的书不适合你,因为读过像样的书的人不会有这种误解;相信我,我也经历过!请访问this list找到更好的书。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44223350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档