函数中的错误从链表中释放

时间:2017-07-04 01:48:52

标签: c linked-list operating-system

我无法找到代码错误...

我得到一个内存地址作为参数,需要从我的列表中释放(HEAP)

列表结构:

typedef struct free_node {
    size_t free;
    size_t size;
    struct free_node *next;
} free_node_t;

typedef struct {
  free_node_t *head;
  free_node_t *lastAlloca; // Usado para next fit
} free_list_t;

我需要做一个释放ptr内存地址的函数

void libera(void *ptr) {

    free_node_t *metaData = (void*)ptr - sizeof(free_node_t);
    assert(HEAP->lastAlloca != NULL);
    free_node_t *listNavigator = HEAP->head;

    while(listNavigator != NULL) {  
        if(listNavigator->next == metaData) {   
            listNavigator->next = metaData->next;
            listNavigator->free += metaData->size + metaData->free + sizeof(free_node_t);
            break;
        }       
        listNavigator = listNavigator->next;
    }
}

但是,它没有用。当我编译一些分段错误的情况时。

请帮帮我:)

1 个答案:

答案 0 :(得分:0)

看起来您正在尝试实施跟踪内存分配器。要获得元数据的偏移量,您必须使用临时指针,如下所示:

free_node_t *metaData = (void*)ptr - sizeof(free_node_t);

你的演员ptr没有做任何事情,因为cors: { origin: ["www.one.com","www.two.com","www.three.com"] } app.all('*', function(req, res, next) { let origin = req.headers.origin; if(cors.origin.indexOf(origin) >= 0){ res.header("Access-Control-Allow-Origin", origin); } res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); 作为void指针传递,你不能减少一个void指针。