【发布时间】:2018-05-02 10:58:18
【问题描述】:
我是 C 的新手,并试图弄清楚如何处理从函数返回的结构,对这些结构的引用。
例如,这大致就是我想要做的。
typedef struct test_t{
char *test_c;
} test_t;
int testFunc(test_t** output){
test_t* testStruct = malloc(sizeof(testStruct));
char* buf = malloc(sizeof(char) * 5);
strcpy(buf, "test");
testStruct->test_c = buf;
*output = testStruct;
return 0;
}
int main() {
test_t* test;
testFunc(&test);
printf("%s\n",test->test_c);
free(test);
return 0;
}
所以我主要得到了测试结构。在printf 之后(假设病房后有一些代码)我不再需要它并想释放它。但是如何正确地做到这一点?我应该先明确地释放 test_c 吗?但是如果没有分配呢?
【问题讨论】:
-
在执行
free(test);之前,您只需执行free(test_c);。 “但如果没有分配呢?” - 如果test没有分配怎么办?有一种通用的方法可以确定test->test_c是否“可释放”。你需要自己管理。 -
另见(可能重复):does free() follow pointers?
-
根据经验,分配代码是负责释放的代码。所以设计这样一个程序的正确方法是创建两个文件 test.h 和 test.c。在 test.c 中,一个函数“test_allocate”进行分配,一个函数“test_free”进行释放。调用者负责调用这两个函数,但不负责了解结构的内部工作原理。