我对这种C行为感到有些困惑。如果我在节点之后初始化“head”指针,它似乎不会继续保持下一个元素。示例代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int value;
struct node* next;
} node;
int main(void)
{
node* head = NULL;
node* current = malloc(sizeof(node));
current->value = 1;
if(head == NULL)
head = current;
current = current->next;
current = malloc(sizeof(node));
current->value = 2;
printf("%d\n", current->value); // 2
printf("%d\n", head->value); // 1
printf("%d\n", head->next->value); //Segmentation fault: 11, Should be 2
return 0;
}
据我了解:我将malloc()内存用于当前,然后设置该值。然后将头设置为等于当前。他们现在都指向同一个节点。
然后我创建current = current-&gt; next,malloc内存并设置值。
为什么head-&gt; next-&gt;值不指向与current-&gt;值相同的位置?
答案 0 :(得分:0)
要创建2个链接的节点,您需要将第一个next
保存到第二个节点。
更改
current = current->next;
current = malloc(sizeof(node));
current->value = 2;
要
current = malloc(sizeof(node));
current->value = 2;
head->next = current;
这将创建一个新节点(重新使用您已分配给head
的当前指针)并将其附加到head
。
在实践中虽然您可能不希望将它附加到这样的head
,因为它不会像超出2的那样工作。您想在列表的末尾创建一个新条目,即开头列表,或将其插入列表中间。
答案 1 :(得分:0)
这不符合你的想法:
current = current->next;
在此声明之前,您有:
---------------
current ---> | 1 | ? |
---------------
current
指向一个足够大的内存区域,node
value
的值为next
且值malloc
未知current
}返回未初始化的内存。
在此语句之后,current->next
包含current = malloc(sizeof(node));
包含的垃圾值。当你这样做时:
current
您将malloc
的值更改为返回的current->next = malloc(sizeof(node));
current = current->next;
,覆盖之前的值。
要做你想做的事,你需要这样做:
DataFrame.as_matrix()