从函数导出列表

时间:2013-11-21 05:04:28

标签: c list for-loop struct

我的C语言有问题。

此循环创建一个包含文件信息的列表。每行“pl”,“pc”和“pv”。

并且每行打印信息,3个数字。

=============================================== ==

实施例。 1

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循环中的信息,但是在另一个循环中打印了前一个循环中创建的列表。

=============================================== ==

实施例。 2

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”。

第一个和第二个例子有什么不同?它不应该这样做吗?

请帮忙!

2 个答案:

答案 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);*/

}

如果未分配列表节点,请将其分配并适当地添加到列表中。