C语言 函数中的错误从链表中释放出来



我找不到我的代码错误...

我得到一个内存地址作为参数,需要从我的列表中释放(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是作为空指针传递的,并且你不能递减空指针。

相关内容

  • 没有找到相关文章