你能指出这个noob C代码中的错误吗


这是我第一次尝试创建linkedList。代码肯定不合适,但我只想创建一个列表,并用一个节点初始化它。下面的代码语法正确,但不起作用。可以指出错误。
#include <stdio.h>
#define SIZE 5
struct node
{ int item;
struct node *link;
};
struct linkedlist
{
struct node *head;
int count;
};
void init(struct linkedlist *p , int key)
{
struct node *newnode;
newnode = (struct node*)malloc(sizeof(struct node));
newnode->link = NULL;
newnode->item = key;
p->head = newnode;
p->count = 1;
}
void main()
{   struct linkedlist *s;
init(s , 2);
printf("%d", s->count);

}

在函数init取消引用结构之前,必须分配结构并将其指针分配给s

此外,您应该在托管环境中使用标准int main(void),而不是void main(),这在C89和C99或更高版本中定义的实现中是非法的,除非您有特殊原因使用非标准签名。

另一个值得注意的是,malloc()家族的铸造结果被认为是一种糟糕的做法。

int main(void)
{   struct linkedlist *s = malloc(sizeof(*s)); /* allocate the structure */
if (s == NULL) return 1; /* check if allocation succeeded */
init(s , 2);
printf("%d", s->count);
}

免责声明:我没有释放s,因为它只分配了一次,执行很快就结束了。该节点也不会被释放。现代操作系统不需要在程序结束时释放。(c-当你在malloc之后没有释放时,会发生什么?-堆栈溢出(你可能想添加释放来满足像Valgrind这样的内存检查器。

在调用init函数之前,需要在主函数中将内存分配给s指针。因此,解决方案是在调用init((函数之前添加以下行:

s = (struct linkedlist*)malloc(sizeof(struct linkedlist));

它应该正常工作,没有错误。快乐学习!

此程序中存在一个主要的概念错误。如果要将未初始化的指针作为参数传递,请将其初始化为至少NULL。传递空指针没有任何意义。在上面的代码中仅仅声明一个指向struct-linkedlist的指针并不能真正为您获得它的对象,除非您静态或动态地创建一个对象。指针用于存储有效的内存地址,仅仅声明指向int数据类型的指针并不能真正为您创建数据类型为int的变量。我希望最后三个声明已经清楚地表明了你的错误。然而,我已经解决了你的问题,代码如下:

#include <stdio.h>
#include <stdlib.h>
#define SIZE 5
struct node
{ 
int item;
struct node *link;
};
struct linkedlist
{
struct node *head;
int count;
};
void init(struct linkedlist *p , int key)
{
struct node *newnode;
newnode = (struct node*)malloc(sizeof(struct node));
newnode->link = NULL;
newnode->item = key;
p->head = newnode;
p->count = 1;
}
void main()
{  
struct linkedlist *s = (struct linkedlist*)malloc(sizeof(struct 
linkedlist));
init(s , 2);
printf("%d", s->count);

}

相关内容

  • 没有找到相关文章

最新更新