gpt4 book ai didi

c - 释放结构指针是否也会释放 C 中结构内部分配的内存?

转载 作者:太空狗 更新时间:2023-10-29 16:05:50 24 4
gpt4 key购买 nike

例如我有这样的结构:

typedef struct{
char *var = (char*)malloc(20*sizeof(char));
} EXAMPLE;

EXAMPLE *point = (EXAMPLE*)malloc(sizeof(EXAMPLE));

我的第一个问题是,只有在为EXAMPLE指针分配内存时,结构内部分配的内存才会分配吗?

我的第二个问题,当我使用free(point) 时,分配给var 的内存也会被释放吗?

最佳答案

使用这个结构:

typedef struct{
char *var;
} EXAMPLE;

请记住,当您为结构分配空间时,您只是在为 char * 指针分配空间。这个指针只是指向别处的内存。当您free() 结构时,您只是释放char * 指针,而不是它指向的实际内存。

因此,如果您创建此结构,然后为您希望 var 指向的字符串创建 malloc() 空间,则需要 free() 字符串以及 free() 结构。


一些代码展示了它是如何工作的:

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

typedef struct {
char *var;
} EXAMPLE;

int main(int argc, char *argv[]) {

// malloc() space for the EXAMPLE struct.
EXAMPLE *point = malloc(sizeof(EXAMPLE));
// malloc() space for the string that var points to.
point->var = malloc(20 * sizeof(char));
// Copy "Hello!" into this memory (care with strcpy).
strcpy(point->var, "Hello!");
// Print it, it works!
printf("point->var is: %s\n", point->var);

// Free stuff.
free(point->var);
free(point);

return 0;
}

另请注意,我们不会强制转换 malloc() 的结果,在 C 中您不应该这样做。还要注意我们 free() point->var first before point。这很重要,因为如果我们 free() 首先指向,我们将丢失指向 point->var 的指针,并且我们会发生内存泄漏。

关于c - 释放结构指针是否也会释放 C 中结构内部分配的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41274353/

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