gpt4 book ai didi

c - 我是否在我的结构指针上正确地调用了 free() ?

转载 作者:太空宇宙 更新时间:2023-11-04 07:23:10 25 4
gpt4 key购买 nike

因此,在测试我的结构时,我使用了以下方法。您可以看到我在方法末尾对指针调用了 free 。这样对吗?

void test() {

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

// do some stuff with labelVector and variableVector

free(labelVector);
free(variableVector);
}

这是我的结构初始化方法的样子:

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

你也应该有销毁它的功能。

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

关于c - 我是否在我的结构指针上正确地调用了 free() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20143630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com