Ces*_*arB 11
引用您的评论:
我正在制作一个基本上摆脱结构的方法.它有一个数据成员,它指向可能或可能没有被malloced的东西..取决于哪一个,我想释放它
正确的方法是在结构中添加另一个成员:指向释放函数的指针.
它不仅仅是静态与动态分配.有几种可能的分配器,其中malloc()只有一种.
在类Unix系统上,它可能是:
alloca())malloc()newnew[]malloc()newmmap在Windows上,也有一些运行时,LocalAlloc,GlobalAlloc,HeapAlloc(与几个堆,你可以轻松地创建),等等.
您必须始终使用您使用的分配器的正确释放功能释放内存.因此,负责分配内存的程序部分也应释放内存,或者必须将正确的释放函数(或其周围的包装器)传递给释放内存的代码.
您还可以通过要求指针始终使用特定分配器进行分配,或者通过自己提供分配器(以函数的形式分配内存以及可能的函数来释放它)来避免整个问题.如果你自己提供分配器,你甚至可以使用技巧(如标记指针)来允许一个人也使用静态分配(但我不会在这里详细介绍这种方法).
Raymond Chen有一篇关于它的博客文章(以Windows为中心,但各处的概念都是一样的):跨模块边界分配和释放内存