gpt4 book ai didi

c - 结构指针成员和内存管理

转载 作者:太空狗 更新时间:2023-10-29 15:25:03 25 4
gpt4 key购买 nike

我想知道指向非动态分配变量的结构成员会发生什么。所以:

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

typedef struct {
int value;
int *pointer;
} MyStruct;

int year = 1989;

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

MyStruct *myStruct = (MyStruct *) malloc(sizeof(MyStruct));

myStruct->value = 100;
myStruct->pointer = &year;

year++;

printf("%d \n", *myStruct->pointer);

// what happens to the myStruct->pointer member when we free myStruct ?
free(myStruct);

return EXIT_SUCCESS;
}

我假设它已被销毁并且不再指向 年份 正确吗?如果是这样的话,如果 *pointer where pointing to a function right?

像这样:

typedef struct {
int value;
void (*someFunc)();
} MyStruct;

然后:

void sayHi(){
printf("hi");
}

...

myStruct->someFunc = sayHi;

如果我们的结构是用 malloc 创建的,除了 free() 之外不需要特别清理吗?感谢任何人的任何见解。

最佳答案

如果您没有malloc(或calloc/strdup/realloc),则不需要释放它。不需要什么特别的 - 成员变量只是指向某物,它在逻辑上并不“拥有”指向的内存。

你的 year 成员变量将仍然存在并且在你 free(myStruct) 之后完全有效 - myStruct->pointer 将无效虽然使用

关于c - 结构指针成员和内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5614903/

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