我是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),就相当于什么都不做。

10-07 15:20