我是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吗?但如果没有分配呢? 最佳答案
结构可以像任何其他指针一样被释放。但是,您必须确保在执行此操作之前释放其所有分配的成员(否则很可能会导致结构成员的内存泄漏)。
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->test_c);
free(test);
return 0;
}
如果您的结构没有分配它的所有元素,您可以将它们的指针设置为
NULL
,一旦传递给free (3)
,就相当于什么都不做。