C 未传递指针,printlist不工作

C 未传递指针,printlist不工作,c,pointers,modularity,C,Pointers,Modularity,以下代码中的printlist函数不起作用。当我从主函数传递节点指针时,该值不会被传递 void printlist(node *head) { node *current=head; while(current!=NULL) { printf("\n %d",current->data); current=current->next; } } int main(void) { int ch=1;

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

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;
        }
    }
}  

**注意:-创建列表工作正常。我没有将其放在此处以减小问题大小,我尝试在主函数中使用相同的打印技术,效果非常好。仅当我尝试将其作为函数实现时,错误才开始出现。

您的主要问题是:

while(ch=1)
    {
        node *head;
head
块的本地,而
块是
块的本地。在
案例1
上创建新列表后,该变量将超出范围并在循环出现之前消失,以便您有机会打印它。所以您只是将未初始化的内存传递给
printlist()
。你需要:

node * head;
while (ch=1) {
您的代码还有许多其他问题:

  • ch=1
    意味着while循环永远不会结束,您似乎永远不会改变
    ch
  • 您为
    head
    调用
    malloc()
    内存,但在调用
    createlist()
    时覆盖
    head
    的值,并在未使用该内存的情况下丢失该内存
  • 节点*current
    从未使用过
  • 不要从
    malloc()

    • 您的主要问题是:

      while(ch=1)
          {
              node *head;
      
      head
      块的本地,而
      块是
      块的本地。在
      案例1
      上创建新列表后,该变量将超出范围并在循环出现之前消失,以便您有机会打印它。所以您只是将未初始化的内存传递给
      printlist()
      。你需要:

      node * head;
      while (ch=1) {
      
      您的代码还有许多其他问题:

      • ch=1
        意味着while循环永远不会结束,您似乎永远不会改变
        ch
      • 您为
        head
        调用
        malloc()
        内存,但在调用
        createlist()
        时覆盖
        head
        的值,并在未使用该内存的情况下丢失该内存
      • 节点*current
        从未使用过
      • 不要从
        malloc()


      您是在调试器中单步执行代码,还是在代码中放入一些printf语句来检查值?这将是第一件要尝试的事情。显示您的所有代码。您确定您的
      createlist()
      函数工作正常吗?请注意,您的while循环已中断,它可能应该使用==您还
      malloc()
      空间作为
      head
      ,然后在调用
      createlist()
      时完全覆盖并丢失它。
      案例1
      下的
      节点*current
      也将是
      开关
      块的本地节点,您不使用它。另外,不要从
      malloc()
      中强制执行返回。实际上,每次执行该循环时,您都会丢失创建的列表。您想将
      节点*头
      移出循环。您是在调试器中单步执行代码还是在代码中放入一些printf语句来检查值?这将是第一件要尝试的事情。显示您的所有代码。您确定您的
      createlist()
      函数工作正常吗?请注意,您的while循环已中断,它可能应该使用==您还
      malloc()
      空间作为
      head
      ,然后在调用
      createlist()
      时完全覆盖并丢失它。
      案例1
      下的
      节点*current
      也将是
      开关
      块的本地节点,您不使用它。另外,不要从
      malloc()
      中强制执行返回。实际上,每次执行该循环时,您都会丢失创建的列表。您想将
      节点*head
      移动到循环之外。Paul,感谢您的回答,问题是这只是代码的一个片段,ch的值在下面的一种情况下发生了更改,代码在没有printlist函数的情况下工作,如果打印是在主函数内完成的。@nahraved:ch
      的问题是最小的问题。正如我所说的,主要问题是
      head
      的范围。以后,请确保您发布了您想要答案的实际代码。如果您发现自己引用了其他可能遗漏的代码,那么您就有可能完全浪费任何试图帮助您的人的时间。如果您提交了一个代码片段,请确保该代码片段已编译,并显示您的问题本身。没有人能帮你处理他们看不见的随机代码。对不起,保罗。我是新来的,我保证不会再发生这种情况。我会修复范围并回复你,非常感谢。我刚刚交换了头部的位置,代码成功了。:)很高兴你弄明白了。如果你需要的话,请接受答案。Paul,谢谢你的回答,问题是这只是代码的一部分,ch的值在下面的一种情况下发生了变化,代码在没有printlist函数的情况下工作,如果打印是在主函数内完成的。@nahraved:ch
      的问题是最小的问题。正如我所说的,主要问题是
      head
      的范围。以后,请确保您发布了您想要答案的实际代码。如果您发现自己引用了其他可能遗漏的代码,那么您就有可能完全浪费任何试图帮助您的人的时间。如果您提交了一个代码片段,请确保该代码片段已编译,并显示您的问题本身。没有人能帮你处理他们看不见的随机代码。对不起,保罗。我是新来的,我保证不会再发生这种情况。我会修复范围并回复你,非常感谢。我刚刚交换了头部的位置,代码成功了。:)很高兴你弄明白了。如果答案是你所需要的,请接受。