在C中使用结构

时间:2018-02-23 13:38:27

标签: c struct malloc

我正在阅读有关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 {

    /* 
        ....
    */

    }
}

1 个答案:

答案 0 :(得分:6)

["true, true, true, true, true, true, true, true, true, ","true, true, true, true, true, true, true, false, false, "] 被称为灵活的阵列成员;它是一个没有大小的数组,只能出现在String facilitiesStr = (request.getParameter("jsFacilitiesArray")).replace(", \"]","").replace("[\"",""); String[] facArr = facilitiesStr.split("\",\""); //out.println(facArr); for (int i = 0; i < facArr.length; i++) { out.println( facArr[i] + " NEXT "); } 的末尾。

基本上就是这样:

ptr

相当于

struct

所以它返回return flag_block->ptr; 中其他成员之后的第一个字节的地址。