struct指针成员和内存管理

时间:2011-04-10 21:38:57

标签: c memory-management

我想知道指向非动态分配变量的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()之外不需要特殊清理吗?感谢任何人的见解。

1 个答案:

答案 0 :(得分:7)

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

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