这是我在StackOverFlow上的第一篇文章。 我正在研究linklist - 下面是我的代码。 我只是添加一个节点来列出并打印它 - 我正在做的是传递指向“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);
}
这是我得到的输出 - 不知道为什么。请帮助。
[zahmed@build3 rnd]$ ./a.out
All OK node added
Segmentation fault
[zahmed@build3 rnd]$
由于
答案 0 :(得分:2)
在addTermCode中,您正在更改infoTerm变量的值。该值是一个指针,但您只是更改本地值(C仅为按值传递)。要在函数外部更改指针,您应该将指针传递给指针......类似于termination_code ** infoTerm,并且更改* infoTerm =&amp; node。
而且,要清楚,分段错误是因为您正在访问外部指针,该外部指针尚未更改并仍指向错误的地址。
答案 1 :(得分:0)
问题在于您传回新对象的方式。将新对象分配给指针将不会像您编写的那样工作。您应该从addTermCode()函数返回对象。
基本上你的list2指针仍为null。从该函数返回新创建的对象并将其分配给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);
}