我无法找到代码错误...
我得到一个内存地址作为参数,需要从我的列表中释放(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;
}
}
但是,它没有用。当我编译一些分段错误的情况时。
请帮帮我:)
答案 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指针。