我有一个 unsigned char* head
,它指向内存中的某个地址,现在我必须创建一个 typedef 结构,我已声明该结构从该指针的位置开始......我很困惑如何做到这一点!
这是 typedef 的声明
typedef struct {
struct block *next;
struct block *prev;
int size;
unsigned char *buffer;
} block;
我的作业涉及实现malloc,所以我不能使用malloc。 block 是 free_list 的一部分,其中包含我的程序堆中的所有空闲内存块 block 。因此,前一个和下一个指针指向前一个和下一个空闲内存块。
Head 指向 free_list 的开头。当我必须分割第一个可用内存块以满足需要更少空间的 malloc() 请求时,我需要移动我的头并在那里创建一个新的 block 结构。
希望这是有道理的。如果没有,分配看起来类似于 this
最佳答案
您的结构没有标签,因此您需要给它一个标签才能使其指向自身:
typedef struct block {
struct block *next;
struct block *prev;
int size;
unsigned char *buffer;
} block;
如果您使用的是 C99,如有必要,您可以直接在 head
处初始化内存,而无需声明临时 struct block
:
*(block *)head = (block){NULL, NULL, 0, NULL};
现在,只要正确转换它,您在地址 head
处就有了一个 struct block
。
例如
((block *)head)->size = 5;
或者您为其分配一个强制转换指针:
block *p = (block *)head;
p->size = 5;
关于在指针指向的地址处创建结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15592721/