数组是否初始化 c 中的内存?



拥有这个链表:

#include <stdio.h>
#include <stdlib.h>
struct node {
int value;
struct node *next;
};
typedef struct node node_t;
void printlist(const node_t*);
node_t *create_node(int);
int main(void){
int values[3] = {1,2,3};
node_t *nodes[3];
for(int i =0; i<3 ; i++)
{
nodes[i] = create_node(values[i]);
if(i!=2)
nodes[i]->next = nodes[i+1]; //HERE, can I assign next (un)initialized node?
}
node_t *header = nodes[0];
printlist(header);
}
void printlist(const node_t* header){
for(const node_t *i = header; i; i=i->next)
printf("value is %in",i->value);
}
node_t *create_node(int value){
node_t *new = malloc(sizeof(node_t));
new->value=value;
new->next = 0;
return new;
}

这给了:

value is 1
value is 29590344
Command terminated

正如我从输出中看到的那样,第一个节点(标头(没有分配next结构成员,这应该发生在循环中。但是我正在将next(指向新节点的指针(分配给数组(指向节点的指针(中的(未(初始化成员。我希望数组的初始化也应该启动内存,当它有大小时。可是呢?如果是这样,那么我不明白为什么赋值不起作用,否则我理解并且必须实现其他循环。感谢您的回答。

您的代码不会创建动态列表,因为您有一个包含 3 个节点的数组。 不需要next

你可能想要这样的东西。

/* you need to check if memory allocation was successful */
#include <stdlib.h>
#include <stdio.h>
typedef struct node {
int value;
struct node *next;
} node_t;
void printlist(const node_t*);
node_t *append_node(node_t *, int);
int main()
{
node_t *head = NULL, *parent = head;
for(int x = 0; x < 10; x++)
if(!head)
{
head = append_node(NULL, x);
parent = head;
}
else
{
parent = append_node(parent, x);
}
printlist(head);
}
void printlist(const node_t* head){
while(head)
{
printf("value is %in",head->value);
head = head -> next;
}
}
node_t *append_node(node_t *parent, int value){
node_t *new = malloc(sizeof(*new));
new->value=value;
new->next = NULL;
if(parent) parent -> next = new;
return new;
}

相关内容

  • 没有找到相关文章

最新更新