我正在尝试创建一个线性链表。
看起来非常简单,但即使代码看起来很好,也无法编译。
这是头文件和主文件。你能告诉我这是什么问题吗?
#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();
}
会感激一些帮助。感谢。
答案 0 :(得分:2)
根据C标准
5对于不同作用域或使用不同标记的结构,联合或枚举类型的声明声明了不同的类型。 不包含标记的结构,联合或枚举类型的每个声明都声明了一个不同的类型。
在此声明中
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
。