gpt4 book ai didi

c - 释放分配给指针的内存与释放分配给指针指向的内存

转载 作者:行者123 更新时间:2023-11-30 15:55:51 24 4
gpt4 key购买 nike

以下是 C 中堆栈结构的实现。我需要编写一个函数(而不是方法)来处置现有堆栈,当然还要释放堆上为其分配的任何内存。 dispose (stack *s) 函数接收一个指向要释放的堆栈的指针。

typedef struct {
int allocatedLength;
int logicalLength;
int elementSize;
void *elems;
} stack;

如果我按如下方式实现 dispose() 函数,是否会导致某些内存永远不会被释放?

void dispose (stack *s) {
free (s->elems);
}

在上面的实现中,我只释放分配给elems的内存,它甚至不在堆上。我们需要记住 elems 是指向某个东西的指针。难道我们不应该释放那些东西,而不是释放分配给指针的内存吗?

最佳答案

你误解了:free(p)不是释放p的内存,而是释放*p的内存code>——即p指向的内存。因此,您正确地释放了在s->elems中存储指针的已分配内存,一切都很好。

请随意责怪每个谈论“释放指针”的用词不当的人,而实际上他们应该说“释放我拥有指针的内存”。

关于c - 释放分配给指针的内存与释放分配给指针指向的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11667834/

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