【发布时间】:2016-07-08 18:23:47
【问题描述】:
假设我正在为一个库实现一个通用堆栈结构。这是一个示例块:
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 仅使用该功能。 ints 堆栈示例:
static void* alloc_stack(void* val)
{
int* p = malloc(sizeof(int));
*p = *(int*)val;
return p;
}
我的问题是:当我为make_stack_node 中的node 分配内存时,当我为alloc_stack 中的int 分配内存时,我是否分配了太多?制作node->key = f(val); 时是否存在内存泄漏?
我相信是这样,因为我认为node->key 的内存在分配node 的过程中已经分配了,所以当我为int* 分配内存并将该块分配给node->key 时,不会泄露了node->key 指向的前一个东西?
【问题讨论】:
-
不需要使用分配函数来分配节点吗?你也不需要释放函数吗?
标签: c memory-management memory-leaks