我的代码有问题。我应该有 4 个文件。list.h、listAdders.c、listMovers.c 和 listRemovers.c。
我应该为大小为 minList 和 minNode 的列表和节点静态声明 2 个内存块。并且 Malloc(( 只允许在运行时使用(这意味着我不按列表或按节点分配内存(。
listRemovers.c 和 listMovers.c 将需要访问我使用 malloc(( 为我的列表和节点分配的内存块。
没有 init(( 函数,我不知道如何 malloc(( 一个将保存列表和节点的全局变量数组。
以防万一我的问题不清楚。如何为列表和节点结构错误地分配初始内存块?这样,当我创建列表或添加节点时,它们存储在我分配的内存中。
这是我所拥有的:
列表.h
#ifndef __LIST__
#define __LIST__
#define MIN_LISTS 3
#define MIN_NODES 30
typedef struct NODE{
struct NODE* next;
struct NODE* prev;
} NODE;
typedef struct LIST{
struct NODE* head;
struct NODE* cursor;
int size;
} LIST;
extern NODE *node_block;
extern LIST *list_block;
LIST *ListCreate();
int ListAdd(LIST *list, void* item);
#endif // __LIST__
listAdders.c
#include "list.h"
#include <stdlib.h>
#include <stdio.h>
NODE *node_block = malloc(MIN_NODES * sizeof(struct NODE));
LIST *list_block = malloc(MIN_LISTS * sizeof(struct LIST));
LIST *ListCreate()
{
}
int ListAdd(LIST * list, void* item)
{
}
没有 init(( 函数,我不知道如何 malloc(( 一个将保存列表和节点的全局变量数组。
C 不允许实际函数之外的可执行代码。
所以这段代码不会编译:
NODE *node_block = malloc(MIN_NODES * sizeof(struct NODE));
LIST *list_block = malloc(MIN_LISTS * sizeof(struct LIST));
鉴于您的问题陈述:
我应该为大小为 minList 和 minNode 的列表和节点静态声明 2 个内存块。
用以下代码替换上面的代码将是一个"静态声明":
NODE node_block[ MIN_NODES ];
LIST list_block[ MIN_LIST ];
你也可以做这样的事情:
NODE *node_block;
LIST *list_block;
static void init_memory()
{
node_block = malloc(MIN_NODES * sizeof( *node_block ));
list_block = malloc(MIN_LISTS * sizeof( *list_block ));
}
int main( int argc, char **argv )
{
init_memory();
.
.
.
}
请注意,如果您需要比开始时更多的节点和/或列表,则从固定数量的已分配节点和列表开始将导致不必要的复杂代码。
静态分配所有内存,或动态分配所有内存。 这样你的代码就会简单得多。