C语言中的单链接列表

C语言中的单链接列表,c,C,这是我关于StackOverFlow的第一篇文章。 我正在处理链接列表-下面是我的代码。 我只是在列表中添加一个节点并打印它——我所做的只是将一个指针传递给“addTermNode”函数,然后将这个传递的指针指向新创建的节点 #include<stdio.h> #include<time.h> typedef struct _termination_code_ { int terminationCode; unsigned long time; struc

这是我关于StackOverFlow的第一篇文章。 我正在处理链接列表-下面是我的代码。 我只是在列表中添加一个节点并打印它——我所做的只是将一个指针传递给“addTermNode”函数,然后将这个传递的指针指向新创建的节点

#include<stdio.h>
#include<time.h>


typedef struct _termination_code_ {
  int terminationCode;
  unsigned long time;
  struct _termination_code_ *next;
}termination_code;

int addTermCode(termination_code *infoTerm, int termCode, unsigned long timerInfo)
{
        termination_code *node;
        node=(termination_code*)malloc(sizeof(termination_code));
        if(NULL == node) return -1;
        node->terminationCode=termCode;
        node->time=timerInfo; 
        node->next=NULL;
        infoTerm = node;
        return 0;
}

int main ()
{
        termination_code *list2=NULL;
        //Add A single node and print it. 
        if(addTermCode(list2, 12, time(0))==0)
                printf("All OK node added\n");
        else 
                printf("something went wrong\n");

        printf("Entered info :%d %ld\n",list2->terminationCode,list2->time);
}

感谢您在addTermCode中更改infoTerm变量的值。该值是一个指针,但您只是在更改本地值(C仅为传递值)。要更改函数外部的指针,应传递指向该指针的指针。。。类似于终止代码**infoTerm和change*infoTerm=&node


而且,要明确的是,分段错误是因为您正在访问外部指针,该指针没有更改,仍然指向错误的地址。

问题在于您传回新对象的方式。将新对象指定给指针的方式与您编写的方式不同。您应该从addTermCode()函数返回对象

基本上,list2指针仍然为空。从该函数返回新创建的对象,并将其分配给list2

如果没有,则需要调整代码,以便正确分配指针

int addTermCode(termination_code **infoTerm, int termCode, unsigned long timerInfo)
{
     ....
     *infoTerm = node;
}

int main ()
{
    termination_code *list2=NULL;
    //Add A single node and print it.
    if(addTermCode(&list2, 12, time(0))==0)
       printf("All OK node added\n");
    printf("Entered info :%d %ld\n",list2->terminationCode,list2->time);
}

谢谢ricosrealm-我刚才也想到了同样的事情:)
int addTermCode(termination_code **infoTerm, int termCode, unsigned long timerInfo)
{
     ....
     *infoTerm = node;
}

int main ()
{
    termination_code *list2=NULL;
    //Add A single node and print it.
    if(addTermCode(&list2, 12, time(0))==0)
       printf("All OK node added\n");
    printf("Entered info :%d %ld\n",list2->terminationCode,list2->time);
}