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