c/c++语言开发共享释放已分配给char指针(字符串)数组的内存。 我是否必须释放每个字符串或只是“主”指针?

我有一个函数,它接受一个指向char **的指针并用字符串填充它(我想是一个字符串数组)。 * list_of_strings *在函数内部分配内存。

char * *list_of_strings = NULL; /* list_of_strings malloc'd inside function */ fill_strings_with_stuff(&list_of strings); use_list_for_something(list_of_strings); /* Now how do I free it all? */ 

在使用弦乐后,我将如何释放内存? 如果我打电话

 free(list_of_strings); 

不会只是释放实际的指针而不是每个字符串本身使用的内存吗? 我如何完全释放内存

为了清楚起见,该函数看起来像这样:

 fill_strings_with_stuff(char *** list) { *list = malloc(AMOUNT); for (i = 0; i < SOMETHING; i++) { *(list + i) = malloc(LINE_LEN); *(list + i) = some_string_from_somewhere } /* ... */ } 

    不会只是释放实际的指针而不是每个字符串本身使用的内存吗?

    确实是的。

    我如何完全释放内存

    通过循环遍历数组并逐个释放每个字符串, 然后释放数组本身。 例如

     for (i = 0; i < SOMETHING; i++) { free(list[i]); } free(list); 

    基本上,分配和释放有一个经验法则:你需要调用尽可能多的free(),就像你调用malloc()一样。 就这么简单。 在其他每一种情况下,你都会遇到内存泄漏。

    是的,您必须free()malloc()获得的每个块。 你可以通过遍历指针数组并在每个元素上调用free()然后释放数组本身来实现。

    只有你知道有一个树状结构可以递归释放,知识不在C运行时堆中的任何地方,所以堆管理器不知道这一点,你的程序必须自己释放一切。

    您需要迭代list并在每个数组成员上调用free() 。 然后释放arrays。

    需要了解更多c/c++开发分享释放已分配给char指针(字符串)数组的内存。 我是否必须释放每个字符串或只是“主”指针?,也可以关注C/ C++技术分享栏目---计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享释放已分配给char指针(字符串)数组的内存。 我是否必须释放每个字符串或只是“主”指针?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

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

      ctvol管理联系方式QQ:251552304

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

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐