1
5
一种解决方案是提供一个函数指针,负责正确释放节点。
列表自由修改如下:
示例数据自由:
列表自由调用示例:
如果不想通过参数传递无数据函数指针,可以将其存储到列表结构中,如下所示:
免责声明:我没有测试这个代码,它可能有问题… |
2
2
你没有错,这是OOP特别是C++解决的问题之一。 您可以在结构中添加一个指向函数成员的指针,用于释放其数据。基本上用手添加C++析构函数。这样就可以保持遗传性而不会有太多的重复。 |
3
2
如果应用程序可以在列表中存储任意数据,那么应用程序也有责任安排适当的清理。
|
4
0
正如问题所示,您的问题不在双重链接列表中,而是在复合动态结构中。这就是手动内存管理的工作原理:您必须跟踪已分配的内容。最好每次都坚持使用相同结构的节点数据,这样预定义的例程就可以释放它。或者,在结构上使用标记并在运行时切换标记以在不同结构的解除分配例程之间进行选择(或者只使用函数指针来模拟C++析构函数)。 |
5
0
hmmm:创建
编辑:
改变
|
6
0
您可能想要尝试的一种方法是实现内存池;如果您不打算单独释放节点,那么实现内存池就非常简单。
简单地
如果操作正确,这也可能会稍微提高性能。 |
7
0
正如其他人所说,您已经确定了一些在C语言中手工操作是很痛苦的事情,但是必须要做。您可以使用函数指针使释放机制成为数据的通用机制,但是您仍然必须实现该机制,以便在每个节点中沿着数据的层次结构向下移动,以释放所有内容。 这是一个很好的练习,值得为学习体验而做。 但是还有一个非常有用的库可以为您处理所有这些问题: talloc . 它为您跟踪层次结构,因此释放顶层会自动释放底层的所有内容。它有很好的记录。它是为桑巴开发的,现在仍在那里使用,所以维护得很好。 |
8
0
问题不在于清单上
所以需要有一个通用的
无论哪种方式,你基本上都在做C++所做的事情。 |
Community wiki · 如何调试Python内存故障? 1 年前 |
tuskiomi · 如何为参考提供明确的锈蚀寿命? 2 年前 |
cobb208 · Malloc正在为释放指针引发错误 2 年前 |
mo FEAR · C++ STL映射是否在创建后移动了一个值的位置? 2 年前 |
Pooyanoss · 覆盖类的堆栈分配实例 2 年前 |
TheKing · 为什么数组的地址可以有负值? 2 年前 |
Http2inc · 如何从内存中解析这些二进制数据? 2 年前 |
tifrel · 如何检查已编译类型的表示形式? 2 年前 |
Gabriele · 释放GSL矩阵的正确方法是什么? 6 年前 |
Makogan · 3D纹理大小影响程序输出,不会引发错误 6 年前 |