c/c++语言开发共享我在结构指针上调用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); } } 

      以上就是c/c++开发分享我在结构指针上调用free()correclty吗?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519264.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐