我找不到我的代码错误...
我得到一个内存地址作为参数,需要从我的列表中释放(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;
}
}
但是,它不起作用。当我针对某些分段错误的情况进行编译时。
请帮我:)
看起来您正在尝试实现跟踪内存分配器。要获取元数据的偏移量,您必须使用临时指针,如下所示:
void libera(void *ptr) {
free_node_t *temp = (free_node_t*)ptr;
free_node_t *metaData = temp - 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;
}
}
你的施法free_node_t *metaData = (void*)ptr - sizeof(free_node_t);
不会做任何事情,因为ptr
是作为空指针传递的,并且你不能递减空指针。