指针未通过,printlist不起作用

时间:2013-08-25 17:50:38

标签: c pointers modularity

以下代码中的printlist函数不起作用。当我从main函数传递节点指针时,不传递值。

void printlist(node *head)
{

    node *current=head;

    while(current!=NULL)
    {
        printf("\n %d",current->data);
        current=current->next;
    }
}


int main(void)
{
    int ch=1;
    int choice=1;
    while(ch=1)
    {
        node *head;
        head=(node*)malloc(sizeof(node));
        printf("Press 1 for create list \n2 for display \n3 for add at end of list \n");
        scanf("%d",&choice);`


        switch(choice) {
        case 1:
            head=createlist();
            node *current=head;
            break;

        case 2:
            printf("Welcome to list printer");
            printlist(head);
            break;
        }
    }
}  

**注意: - 创建列表工作正常我没有把它放在这里以减少问题的大小,我尝试在主要功能中使用相同的打印技术,它已经像魅力一样工作。只有当我试图将其实现为错误开始的函数。

1 个答案:

答案 0 :(得分:3)

你的主要问题在于:

while(ch=1)
    {
        node *head;

headwhile块的本地。在case 1上创建一个新列表后,该变量将超出范围并在循环结束前消失,以便您有机会打印它。所以你只是将未初始化的内存传递给printlist()。你需要:

node * head;
while (ch=1) {

您的代码存在许多其他问题:

  • ch=1表示while循环永远不会结束,您似乎永远不会改变ch
  • malloc()的{​​{1}}内存,但是当你调用head时会覆盖head的值并丢失内存,而不会使用它。
  • createlist()从未使用
  • 不要从node * current
  • 转发回报