我在结构指针上调用free()correclty吗?

因此,在测试我的结构时,我使用以下方法。 你可以看到我在方法末尾的指针上调用free。 这是正确的吗?

void test() { VariableVector *labelVector = initVariableVector(); VariableVector *variableVector = initVariableVector(); // do some stuff with labelVector and variableVector free(labelVector); free(variableVector); } 

这是我的struct init方法的样子:

 Variable* initVariable(char *variableName, char *arrayOfElements, int32_t address) { Variable* initializedVariable = malloc(sizeof(Variable)); if (initializedVariable != NULL ) { initializedVariable->variableName = variableName; initializedVariable->arrayOfElements = arrayOfElements; initializedVariable->address = address; return initializedVariable; } else { return NULL ; } } VariableVector* initVariableVector() { VariableVector* initializedVariableVector = malloc( sizeof(VariableVector)); if (initializedVariableVector != NULL ) { initializedVariableVector->size = 0; initializedVariableVector->capacity = VECTOR_INITIAL_CAPACITY; initializedVariableVector->variables = malloc( sizeof(Variable) * VECTOR_INITIAL_CAPACITY); return initializedVariableVector; } else { return NULL ; } } 

你的想法是正确的,但你的实现不是。

initVariableVector()为一个对象做了2个malloc ,但是你只做了1个free

你应该有破坏它的function。

 void destroyVariableVector(VariableVector* vector) { if(vector) { free(vector->variables); free(vector); } } 

编辑:您没有检查结构VariableVector中成员“变量”的内存分配是否成功。 这意味着即使在最后你也不会手动释放它,因此会导致内存泄漏。

我的建议:使用“init *”函数,但同时使用“free *”函数。 它使代码更清晰,并处理所有内存释放。

initVariableVector,相反应该是freeVariableVector

而后者的function可能如下所示:

 void freeVariableVector(VariableVector *vv) { if (vv) { if (vv->variables) free(vv->variables); free(vv); } }