free()函数C的原理

Principle of free() function C

我正在使用 free() 来释放某些变量占用的内存,在我的例子中,它的结构或多或少具有以下构造:

struct mystruct{
   int firstparam;
   string secondparam;
   struct someOtherSimpleStruct* otherstruct;

要点是结构内部还有其他简单的(不再有嵌套结构)结构。我只是想确保我确实理解 free() 正确运行的方式。如果我使用 mystruct 指针作为参数调用 free,内存将仅在第一级被清理,因此 mystruct 占用的内存 = int、string 和指针本身的大小,不会释放存储在其他结构中的其他数据并实现它的唯一方法是递归遍历整个嵌套结构?或者也许有任何通用函数可以释放整个嵌套结构的内存?

so the memory occupied by mystruct = size of int, string and the pointer itself, no other data stored inside someother struct won't be freed

正确,因为结构中没有存储其他数据。不过,您有一个指向存储在 别处 的数据的指针。

to achieve it the only way is to recursively iterate throughout the whole nested structure?

是的。在释放周围结构之前释放 otherstruct 指向的任何内容,如果这是唯一引用动态分配内存的指针。

Or maybe there is any universal function which can free a memory of the whole nested structure?

不存在这样的东西。

自从 free() 收到一个 void*,它不知道分配的 space 包含什么或它是如何构造的。因此它不能递归释放内存。