调用getLength函数时出现分段错误。我编辑了代码,
现在我得到的长度是0而不是5。
#include <stdio.h>
#include <stdlib.h>
node *headptr;
node *topptr;
typedef struct node
{
int value;
struct node *nextPtr;
}node;
void initializeLinkedList(node *headptr, node *topptr)
{
int i=0;
headptr = (node*)malloc(sizeof(node));
topptr = (node*)malloc(sizeof(node));
topptr = headptr;
headptr->value=i;
headptr->nextPtr = (node*)malloc(sizeof(node));
for(i=1;i<5;i++)
{
headptr = headptr->nextPtr ;
headptr->value=i;
headptr->nextPtr=(node*)malloc(sizeof(node));
printf("val is %p \n ", *headptr);
}
headptr->nextPtr = NULL;
}
int getLength(node *topptr)
{
int i=0;
node* local;
local = topptr;
while(local!=NULL)
{
local=local->nextPtr;
i++;
}
return i;
}
int main()
{
initializeLinkedList(headptr,topptr);
printf("val is %d \n", getLength(topptr));
return 0;
}
最佳答案
void initializeLinkedList(node *headptr, node *topptr)
把它改成
void initializeLinkedList(node *headptr, node** topptr)
并相应地更改代码。。。
还有很多其他的问题。。。
当你需要一个指针时,只需定义这个指针,不要分配内存和覆盖指针。。
如果我要编码的话
void initializeLinkedList( node **topptr)
{
int i=0;
node* headptr = (node*)malloc(sizeof(node));
headptr->value=i;
*topptr = headptr;
for(i=1;i<5;i++)
{
headptr->nextPtr = (node*)malloc(sizeof(node));
headptr->nextPtr->value=i;
headptr->nextPtr->nextPtr=NULL;
headptr=headptr->nextPtr;
}
}
int main()
{
node* topptr;
initializeLinkedList(&topptr);
printf("val is %d \n", getLength(topptr));
return 0;
}
关于c - 获取链接列表大小时出现段错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17197843/