gpt4 book ai didi

C:在c中分配的空闲内存

转载 作者:行者123 更新时间:2023-12-04 10:27:27 24 4
gpt4 key购买 nike

假设我有一个结构:

typedef struct{
char *ID;
char *name;
float price;
int quantity;
} Generic_Properties;

现在如果我已经使用 malloc 在堆中为其分配空间并将地址保存在指针中,让我们称他为 p1。现在我想释放那个特定的内存块,是否足以声明 free(p1):

free(p1);

或者我是否需要单独释放 ID 和名称指针,因为我使用 malloc 为它们指向的字符串分配了空间?

最佳答案

规则是,mallocfree 应该成对出现。释放所有被 malloc 恰好一次的东西。

char name[] = "some_name";
Generic_Properties *p1 = malloc(...); /* 1 */
p1->ID = malloc(...); /* 2 */
p1->name = name;
...
...
/* free(p1->name); Don't do this, p1->name was not allocated with malloc*/
free(p1->ID); /* 2' */
free(p1); /* 1' */
/* if(p1 && p1->name[0] == '?') {} don't dereference p1 after it is freed. It is dangling now */
...
...
/* free(p1); don't free p1 again as it is already freed and is dangling. */
p1 = NULL;
free(p1); /* OK */

关于C:在c中分配的空闲内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28086677/

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