难道我呼吁我的结构指针免费()correclty?(Am I calling free() corr

2019-10-19 00:42发布

所以在测试我的结构我用下面的方法。 你可以看到,我在方法的最后拨打免费电话上的指针。 这是正确的吗?

void test() {

    VariableVector *labelVector = initVariableVector();
    VariableVector *variableVector = initVariableVector();

    // do some stuff with labelVector and variableVector

    free(labelVector);
    free(variableVector);
}

这是我的结构的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 ;
    }
}

Answer 1:

你的想法是正确的,但您的实现并非如此。

initVariableVector()做2 malloc的一个对象,但你只能做1 free

你应该有函数来销毁它。

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


Answer 2:

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

我的建议是:使用的“init *”的功能,但在同一时间使用“免费*”的功能。 它使代码更清晰,并采取所有的内存释放的护理。

initVariableVector,相反的应该是freeVariableVector

而后者的功能可能看起来像:

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


文章来源: Am I calling free() correclty on my struct pointer?