我创建了一个链表,我可以在每个节点上存储一个字符串和一个整数。我可以在列表顶部添加节点,也可以删除它们,但是我在列表末尾附加了一个节点。
我当前的函数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));
这就是我现在看到的,不知道它是否会解决分段错误。此错误是如何发生的?你只使用这种方法吗?还是您对数据进行各种操作?也许问题出在哪里.不管怎样,我会再看看,看看我是否发现了其他东西。