C - 在 for 循环中管理内存



我正在尝试将文件中的信息保存到堆中的结构中。问题是:如果我在保存数据的 for 循环中打印出信息,它运行良好,但是当我打印出 for 循环之外的数据时,我只会得到垃圾我想知道为什么:(可能我在 Malloc 上做得不好

我可以在第一个 for 循环中工作,但我想知道我做错了什么

typedef struct{
    int tipoDeCodificacion;
    void* carta;
}pedido;
typedef struct{
    void* nombre;
    void* regalo;
}regalos;
void creacionRegalos(FILE *cartas){ 
    FILE *final=fopen("regalos.txt","w");
    int cantidadCartas, i;
    fscanf(cartas,"%dn",&cantidadCartas);
    printf("%dn",cantidadCartas);
    pedido *Pedidos=(pedido *)malloc(sizeof(cantidadCartas));
    regalos **Regalos=malloc(sizeof(regalos *)*cantidadCartas);
    for(i=0;i<cantidadCartas;i++){
        char *lineaCodificada=malloc(sizeof(char)*100);
        int *tipo=malloc(sizeof(int));
        fscanf(cartas,"%dn",tipo);
        Pedidos[i].tipoDeCodificacion=*tipo;
        printf("%dn",Pedidos[i].tipoDeCodificacion); //this print works well
        fgets(lineaCodificada,100,cartas);
        Pedidos[i].carta=lineaCodificada;
        puts(Pedidos[i].carta); //this print works well
    }
    for (i = 0; i < cantidadCartas; i++) {
        printf("%dn",Pedidos[i].tipoDeCodificacion); //just prints garbage
        printf("%sn",(char *)Pedidos[i].carta);//prints garbage
    }
}

行:

pedido *Pedidos=(pedido *)malloc(sizeof(cantidadCartas));

无效。您正在为 sizeof(int) 字节分配内存。您应该:

pedido *Pedidos=(pedido *)malloc(sizeof(*Pedidos) * cantidadCartas);

pedido结构contidadCartas计数分配内存。使用指针访问内存Pedidos pedido*时间,您执行未定义的行为。

您的代码确实难以阅读,缩进严重,具有奇怪的区域设置名称,没有错误检查,并且会泄漏您调用的所有malloc的内存。一个好的代码会检查所有错误的地方if (Pedidos == NULL) { handle_error(); }if(fscanf("%d", ....) != 1)等。int *typo = malloc(sizeof(int));直接向上分配会泄漏内存 - 它无处free d。我还强烈建议您用英语编写所有代码,包括所有结构、变量和函数名称。

相关内容

  • 没有找到相关文章

最新更新