我想知道指向非动态分配变量的struct成员会发生什么。所以:
#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;
}
我认为它被摧毁了不再指向年正确吗?如果是这种情况,如果*指针指向一个函数,那么同样如此吗?
像这样:typedef struct {
int value;
void (*someFunc)();
} MyStruct;
然后:
void sayHi(){
printf("hi");
}
...
myStruct->someFunc = sayHi;
如果我们的结构是用malloc创建的,除free()之外不需要特殊清理吗?感谢任何人的见解。
答案 0 :(得分:7)
如果您没有malloc
(或calloc/strdup/realloc
),则无需释放它。没有什么特别需要 - 成员变量只指向某个东西,它在逻辑上并不“拥有”指向的内存。
您的year
成员变量仍然存在,并且在free(myStruct)
- myStruct->pointer
无法使用之后完全有效