gpt4 book ai didi

对 malloc 和 free 行为感到困惑

转载 作者:太空狗 更新时间:2023-10-29 14:57:36 26 4
gpt4 key购买 nike

关于 C 中的数据结构,我对 free() 的用法感到困惑。

如果我有以下数据结构:

struct Person {
char *name;
int age;
float weight;
float height;
};

我正在通过 malloc() 为结构分配内存,同样:struct Person *me = malloc(sizeof(struct Person));

在我使用完我的结构后(就在程序结束之前),我继续释放分配的内存,如下所示:

free(person_pointer->name);
free(person_pointer);

据我所知,释放 name 指针指向的内存是必要的,因为如果我只释放 person_pointer 我只释放分配给的内存存储数据结构及其成员 但不存储结构成员指针指向的内存。

但是在我的实现中valgrind似乎暗示第一个 free() 是无效的。

所以我的问题归结为:当我通过指针释放结构体占用的内存时,我是否应该抢先释放成员指针指向的内存?

编辑:这是我的全部代码:

#include <stdio.h>
#include <stdlib.h>

struct Person {
char *name;
int age;
float weight;
float height;
};

int main(int argc, char **argv)
{
struct Person *me = malloc(sizeof(struct Person));
me->name = "Fotis";
me->age = 20;
me->height = 1.75;
me->weight = 75;

printf("My name is %s and I am %d years old.\n", me->name, me->age);
printf("I am %f meters tall and I weight %f kgs\n", me->height, me->weight);

free(me->name);
free(me);

return 0;
}

最佳答案

me->name = "Fotis";

/* ... */

free(me->name);

规则是:

1 malloc = 1 free

你没有在 me->name 上使用 malloc,所以你不必 free 它。

顺便说一句,me->name 应该是 const char * 类型。

关于对 malloc 和 free 行为感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15185416/

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