gpt4 book ai didi

c - 是否分配了额外的内存,是否存在内存泄漏?

转载 作者:太空宇宙 更新时间:2023-11-04 00:46:15 24 4
gpt4 key购买 nike

假设我正在为一个库实现一个通用的堆栈结构。这是一个示例 block :

typedef struct stack
{
void* key;
struct stack* next;
void*(*alloc_fn)(void*);
} stack;

static stack* make_stack_node(void* val, stack* next,
void*(*f)(void*))
{
stack* node = malloc(sizeof(stack));
if (!node) {
return NULL;
}
node->key = f(val);
node->next = next;
node->alloc_fn = f;
return node;
}

栈中存放了一个函数指针,指向一个函数,由用户指定,用于分配。 make_stack_node 只需要那个函数。 int 堆栈的示例:

static void* alloc_stack(void* val)
{
int* p = malloc(sizeof(int));
*p = *(int*)val;
return p;
}

我的问题是:当我为 make_stack_node 中的 node malloc 内存时,以及之后为 int< 分配内存时alloc_stack 中,我是否分配了太多?当我制作 node->key = f(val); 时是否存在内存泄漏?

我相信是这样,因为我认为 node->key 的内存在分配 node 时已经分配好了,所以当我为 分配内存时int* 并将该 block 分配给 node->key,这不会泄漏 node->key 指向的先前内容吗?

最佳答案

您不是在为 int* 分配内存,而是在为 int 分配内存。不,只要您释放内存,就不会发生内存泄漏。

当您为 stack 分配内存时,key 不会指向特定的任何地方。这是一个未定义的指针,您不能取消引用。您需要为其分配内存以指向您正在做的事情(或将其设置为指向已分配的内存)。

关于c - 是否分配了额外的内存,是否存在内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38273174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com