与C中的指针混淆

与C中的指针混淆,c,C,我用C写了删除函数,删除整个链表。函数的定义是 void delete(LIST **head) { if(head) { delete(head->next); free(head); *head=NULL; } } 在编译时,我遇到了一个错误:请求非结构或联合中的成员next。 结构是 typedef struct node{ int data; struct node *next; }; head是指向列表

我用C写了删除函数,删除整个链表。函数的定义是

void delete(LIST **head)
{
  if(head)
    {
      delete(head->next);
      free(head);
      *head=NULL;
    }
}
在编译时,我遇到了一个错误:请求非结构或联合中的成员
next

结构是

typedef struct node{
    int data;
    struct node *next;
}; 

head
是指向
列表的指针。您需要取消对它的引用-
*head
-以获得要操作的
列表*

void delete(LIST **head)
{
    if(*head)
    {
        delete(&(*head)->next);
        free(*head);
        *head=NULL;
    }
}

head
是指向
列表的指针。您需要取消对它的引用-
*head
-以获得要操作的
列表*

void delete(LIST **head)
{
    if(*head)
    {
        delete(&(*head)->next);
        free(*head);
        *head=NULL;
    }
}

删除了[C++]标记。这不可能是C++问题。代码>删除<代码>是C++中的关键字。要小心递归,一个很长的列表可能会导致堆栈溢出。我会使用循环。删除了[C++]标记。这不可能是C++问题。代码>删除<代码>是C++中的关键字。要小心递归,一个很长的列表可能会导致堆栈溢出。我会用一个循环来代替。我根据你的建议对我的程序进行了更改,它很有效。但当我试图执行时,它会以错误分段错误(内核转储)终止。我搞不懂。你能帮我弄清楚吗?
delete
功能是正确的,所以问题可能出在你没有发布的代码中。你能创建一个演示崩溃的程序并将其作为一个新问题的一部分发布吗?我根据你的建议对我的程序进行了更改,它工作正常。但当我试图执行时,它会以错误分段错误(内核转储)终止。我搞不懂。你能帮我弄清楚吗?
delete
功能是正确的,所以问题可能出在你没有发布的代码中。你能创建一个演示崩溃的文档并将其作为新问题的一部分发布吗?