我正在尝试创建一个线性链表。
看起来很简单,但即使代码看起来不错,它也无法编译。
这是头文件和主要的。你能告诉我问题出在哪里吗?
#include <malloc.h>
typedef int TYP;
typedef struct
{
TYP info;
node_linear_linked_list *next;
} node_linear_linked_list;
void init_linear_linked_list(node_linear_linked_list **manager)
{
*manager = NULL;
}
void push_linear_linked_list(node_linear_linked_list **manager, TYP info)
{
node_linear_linked_list *ptr =
(node_linear_linked_list *)malloc(sizeof(node_linear_linked_list));
ptr->info = info;
ptr->next = *manager;
*manager = ptr;
}
void insert_after_linear_linked_list(node_linear_linked_list *before, TYP info)
{
node_linear_linked_list *ptr =
(node_linear_linked_list *)malloc(sizeof(node_linear_linked_list));
ptr->info = info;
ptr->next = before->next;
before->next = ptr;
}
void pop_linear_linked_list(node_linear_linked_list **manager)
{
node_linear_linked_list *temp_ptr = *manager;
*manager = temp_ptr->next;
free(temp_ptr);
}
void delete_after_linear_linked_list(node_linear_linked_list *before)
{
node_linear_linked_list *temp_ptr = before;
before->next = before->next->next;
free(temp_ptr);
}
主要内容:
#include <malloc.h>
#include "node_linear_linked_list.h"
void main(void)
{
node_linear_linked_list *manager =
(node_linear_linked_list *)malloc(sizeof(node_linear_linked_list));
init_node_linear_linked_list(&manager);
getch();
}
希望得到一些帮助。谢谢。
最佳答案
按照C标准
5 结构、 union 或枚举类型的两个声明,它们在不同的范围内或使用不同的标签声明不同的类型。 不包含标记的结构、 union 或枚举类型的每个声明都声明了一个不同的类型。
在这个声明中
typedef struct
{
TYP info;
node_linear_linked_list *next;
} node_linear_linked_list;
声明了一个未命名的结构。在这个数据成员声明中
node_linear_linked_list *next;
名称 node_linear_linked_list
未定义。
例如你必须写
typedef struct node_linear_linked_list
{
TYP info;
struct node_linear_linked_list *next;
} node_linear_linked_list;
这个函数
void delete_after_linear_linked_list(node_linear_linked_list *before)
{
node_linear_linked_list *temp_ptr = before;
before->next = before->next->next;
free(temp_ptr);
}
有一个错误。我想你的意思是
void delete_after_linear_linked_list(node_linear_linked_list *before)
{
if ( before && before->next )
{
node_linear_linked_list *temp_ptr = before->next;
before->next = before->next->next;
free(temp_ptr);
}
}
主语句
node_linear_linked_list *manager =
(node_linear_linked_list *)malloc(sizeof(node_linear_linked_list));
导致内存泄漏是因为在下面的语句中
init_node_linear_linked_list(&manager);
指针被重新分配。
我还建议在函数中检查作为参数传递的指针是否等于 NULL
。
关于创建节点线性链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40810591/