gpt4 book ai didi

c - C中结构的使用

转载 作者:太空狗 更新时间:2023-10-29 17:10:58 25 4
gpt4 key购买 nike

我正在阅读关于malloc(first-fit)实现的脚本,我对元数据结构的赋值有点困惑。谁能解释为什么 malloc 返回 flag_block->ptr(作为指向已分配内存的指针)?据我所知,没有具体的分配给它。

typedef struct _metadata {
size_t size;
char free;
struct _metadata* next;
struct _metadata* prev;
char ptr[];
} metadata;

metadata* flag_block = NULL;

void *malloc(size_t size)
{
if (size==0) {
return NULL;
}

if (flag_block == NULL) {
flag_block = sbrk(size);
sbrk(sizeof(metadata));
if (flag_block == (void *)-1) {
return NULL;
}
flag_block->free = 0;
flag_block->next=NULL;
flag_block->prev=NULL;
flag_block->size = size;
return flag_block->ptr;
} else {

/*
....
*/

}
}

最佳答案

ptr 称为灵活的数组成员;它是一个没有大小的数组,只能出现在 struct 的末尾。

所以基本上是这样的:

return flag_block->ptr;

相当于

return &flag_block->ptr[0];

因此它返回 struct 中其余成员之后的第一个字节的地址。

关于c - C中结构的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48949128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com