无法在 C 语言中将节点附加到我的链表的末尾



我创建了一个链表,我可以在每个节点上存储一个字符串和一个整数。我可以在列表顶部添加节点,也可以删除它们,但是我在列表末尾附加了一个节点。

我当前的函数append会将节点设置为列表的末尾,但是在我附加一个节点并尝试附加另一个节点后,我会得到segmentation fault,好像程序无法附加一个新的last当已经有另一个时,我目前正在尝试调试它,但我找不到错误的确切行。

// self-referential structure                       
struct listNode {                                      
char *data; // each listNode contains a character
int num;
struct listNode *nextPtr; // pointer to next node
}; 

typedef struct listNode ListNode; // synonym for struct listNode
typedef ListNode *ListNodePtr; // synonym for ListNode*
void append(ListNodePtr *sPtr, char *value, int valore)
{  /* 1. allocate node */
ListNodePtr lastNode = malloc(sizeof(ListNode)+1);
ListNode *last = *sPtr; 
/* 2. put in the data  */
last->data= malloc(strlen(value));
strcpy(last->data, value);
last->num = valore;
/* 3. This new node is going to be the last node, so make next 
of it as NULL*/
lastNode->nextPtr = NULL;
/* 4. If the Linked List is empty, then make the new node as head */
if (*sPtr == NULL)
{
*sPtr = lastNode;
return;
}  
/* 5. Else traverse till the last node */
while (last->nextPtr != NULL)
last = last->nextPtr;
/* 6. Change the next of last node */
last->nextPtr = lastNode;
}
// insert a new value into the list in sorted order
void insert(ListNodePtr *sPtr, char *value, int valore)
{ 
ListNodePtr newPtr = malloc(sizeof(ListNode)+1); // create node
if (newPtr != NULL) { // is space available
newPtr->data= malloc(strlen(value));
strcpy(newPtr->data, value);
newPtr->num = valore;
newPtr->nextPtr = NULL; // node does not link to another node
ListNodePtr previousPtr = NULL;
ListNodePtr currentPtr = *sPtr;
// loop to find the correct location in the list       
while (currentPtr != NULL && value > currentPtr->data) {
previousPtr = currentPtr; // walk to ...               
currentPtr = currentPtr->nextPtr; // ... next node 
}                                          
// insert new node at beginning of list
if (previousPtr == NULL) { 
newPtr->nextPtr = *sPtr;
*sPtr = newPtr;
} 
else { // insert new node between previousPtr and currentPtr
previousPtr->nextPtr = newPtr;
newPtr->nextPtr = currentPtr;
} 
} 
else {
printf("%s not inserted. No memory available.n", value);
} 
}

好吧,你在这里有很多错误。不确定是什么导致了问题,但请尝试解决此问题:

如果您不一致,为什么要使用同义词?

ListNodePtr lastNode = malloc(sizeof(ListNode)+1);
ListNode *last = *sPtr; 

为什么是+1?

ListNodePtr lastNode = malloc(sizeof(ListNode)+1)

这:

ListNode *last = *sPtr; 
/* 2. put in the data  */
last->data= malloc(strlen(value));
strcpy(last->data, value);
last->num = valore;

覆盖发送到此方法的节点的值。可能打算使用 lastNode

现在你需要+1

last->data= malloc(strlen(value));

这就是我现在看到的,不知道它是否会解决分段错误。此错误是如何发生的?你只使用这种方法吗?还是您对数据进行各种操作?也许问题出在哪里.不管怎样,我会再看看,看看我是否发现了其他东西。

相关内容

  • 没有找到相关文章

最新更新