我的C语言有问题。
此循环创建一个包含文件信息的列表。每行“pl”,“pc”和“pv”。
并且每行打印信息,3个数字。
=============================================== ==
for(i = 0, aux = base->prox; i < p; aux = aux->prox, i++){
aux = (celula *)malloc(sizeof(celula));
fscanf(file, "%d %d %d", &(aux->pl) , &(aux->pc), &(aux->pv));
printf("%d %d %d\n", aux->pl , aux->pc, aux->pv);
}
=============================================== ==
在第二个例子中,我打印出for for循环中的信息,但是在另一个循环中打印了前一个循环中创建的列表。
=============================================== ==
for(i = 0, aux = base->prox; i < p; aux = aux->prox, i++){
aux = (celula *)malloc(sizeof(celula));
fscanf(file, "%d %d %d", &(aux->pl) , &(aux->pc), &(aux->pv));
/*printf("%d %d %d\n", aux->pl , aux->pc, aux->pv);*/
}
for(aux = base; aux != NULL; aux = aux->prox){
printf("%d %d %d\n", aux->pl , aux->pc, aux->pv);
}
=============================================== ==
现在,问题是:在第一个例子中,它正常打印信息。在第二个例子中,不是像第一个例子那样正常打印信息,而是只打印一行“0 0 0”。
第一个和第二个例子有什么不同?它不应该这样做吗?
请帮忙!
答案 0 :(得分:0)
即使第一个例子看起来像你想要的那样,但它们都有一个错误。每次通过for循环都不应该为aux辅助内存。这将导致内存泄漏并导致您丢失使用fscanf读取的值。
你应该在for循环之外的内存中使用malloc。然后使用for循环使用fscanf将值读入内存。
答案 1 :(得分:0)
for(i = 0, aux = base->prox; i < p; aux = aux->prox, i++){
aux = (celula *)malloc(sizeof(celula));
fscanf(file, "%d %d %d", &(aux->pl) , &(aux->pc), &(aux->pv));
/*printf("%d %d %d\n", aux->pl , aux->pc, aux->pv);*/
}
在你的for循环中,你正在aux = (celula *)malloc(sizeof(celula));
覆盖从aux
取得的aux = aux->prox
。所以fscanned数据进入新分配的内存,而不是链表。
因此,当您再次在另一个循环中引用该列表时,它没有读取数据。
如果已创建链接列表,则无需在for循环中分配aux
。因此,请从循环中删除malloc()
。
for(i = 0, aux = base->prox; i < p; aux = aux->prox, i++){
//not needed
//aux = (celula *)malloc(sizeof(celula));
fscanf(file, "%d %d %d", &(aux->pl) , &(aux->pc), &(aux->pv));
/*printf("%d %d %d\n", aux->pl , aux->pc, aux->pv);*/
}
如果未分配列表节点,请将其分配并适当地添加到列表中。