无法将节点附加到C

时间:2018-09-03 16:17:49

标签: c data-structures linked-list

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

我当前的函数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); } } ,我目前正在尝试对其进行调试,但找不到错误的确切行。 / p>

36.HomoSapiensHOXD10gene.fa ....... this is the file name
11753.................length of the file for characters
([2296, 2304, 5794, 10258, 11272],)................patterns of text 

37.HomoSapiensHOXD11gene.fa
6139
([],)

38.HomoSapiensHOXD13gene.fa
3648
([403, 2718],)

1 个答案:

答案 0 :(得分:1)

嗯,您在这里有很多错误。不知道是什么原因导致的问题,但是请尝试解决此问题:

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

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));

这是我现在看到的,不知道它是否可以解决分割错误。这个错误是怎么发生的?您仅使用此方法吗?还是您正在对数据进行各种处理?也许问题出在哪里。无论如何,我会再看一下,看看是否还有其他东西。