当前位置:  开发笔记 > 开发工具 > 正文

检查某些东西是否已被malloced

如何解决《检查某些东西是否已被malloced》经验,为你挑选了1个好方法。

给定一个变量的指针..有没有办法检查它是静态还是动态分配?



1> CesarB..:

引用您的评论:

我正在制作一个基本上摆脱结构的方法.它有一个数据成员,它指向可能或可能没有被malloced的东西..取决于哪一个,我想释放它

正确的方法是在结构中添加另一个成员:指向释放函数的指针.

它不仅仅是静态与动态分配.有几种可能的分配器,其中malloc()只有一种.

在类Unix系统上,它可能是:

一个静态变量

在堆栈上

在堆栈上但动态分配(即alloca())

在堆上,分配 malloc()

在堆上,分配 new

在堆上,在分配的数组的中间 new[]

在堆上,在分配的结构中 malloc()

在堆上,在分配的对象的基类中 new

分配 mmap

分配自定义分配器

更多选项,包括上述的几种组合和变体

在Windows上,也有一些运行时,LocalAlloc,GlobalAlloc,HeapAlloc(与几个堆,你可以轻松地创建),等等.

您必须始终使用您使用的分配器的正确释放功能释放内存.因此,负责分配内存的程序部分也应释放内存,或者必须将正确的释放函数(或其周围的包装器)传递给释放内存的代码.

您还可以通过要求指针始终使用特定分配器进行分配,或者通过自己提供分配器(以函数的形式分配内存以及可能的函数来释放它)来避免整个问题.如果你自己提供分配器,你甚至可以使用技巧(如标记指针)来允许一个人也使用静态分配(但我不会在这里详细介绍这种方法).

Raymond Chen有一篇关于它的博客文章(以Windows为中心,但各处的概念都是一样的):跨模块边界分配和释放内存

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有