我正在尝试将文件中的信息保存到堆中的结构中。问题是:如果我在保存数据的 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。我还强烈建议您用英语编写所有代码,包括所有结构、变量和函数名称。