检查是否有东西被malloced

2023-11-25

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


引用你的评论:

我正在制作一个基本上摆脱结构的方法。它有一个数据成员,它是一个指向可能会或可能不会被分配的东西的指针..根据哪一个,我想释放它

正确的方法是添加another结构体成员:指向释放函数的指针。

这不仅仅是静态分配与动态分配的问题。有several可能的分配器,其中malloc()只是其中之一。

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

  • 静态变量
  • 在堆栈上
  • 在堆栈上但动态分配(即alloca())
  • 在堆上,分配有malloc()
  • 在堆上,分配有new
  • 在堆上,在分配有的数组的中间new[]
  • 在堆上,在分配有的结构内malloc()
  • 在堆上,在分配有的对象的基类内new
  • 分配有mmap
  • 使用自定义分配器分配
  • 更多选项,包括上述选项的几种组合和变体

在 Windows 上,您还有多个运行时,LocalAlloc, GlobalAlloc, HeapAlloc(有几个可以轻松创建的堆),等等。

您必须始终使用您使用的分配器的正确释放函数来释放内存。因此,要么程序中负责分配内存的部分也应该释放内存,要么您必须将正确的释放函数(或其包装器)传递给将释放内存的代码。

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

陈雷蒙德有一篇关于它的博客文章(以 Windows 为中心,但概念在任何地方都是相同的):跨模块边界分配和释放内存

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查是否有东西被malloced 的相关文章

  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • “构建”构建我的项目,“构建解决方案”则不构建

    我刚刚开始使用VS2010 我有一个较大的解决方案 已从 VS2008 成功迁移 我已将一个名为 Test 的控制台应用程序项目添加到解决方案中 选择构建 gt 构建解决方案不编译新项目 选择构建 gt 构建测试确实构建了项目 在失败的情况
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 重载<<的返回值

    include
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 如何在 C 中调用采用匿名结构的函数?

    如何在 C 中调用采用匿名结构的函数 比如这个函数 void func struct int x p printf i n p x 当提供原型的函数声明在范围内时 调用该函数的参数必须具有与原型中声明的类型兼容的类型 其中 兼容 具有标准定
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 如何制作一个通过其他两个枚举器进行延迟迭代的 ruby​​ 枚举器?

    假设我有两个枚举器 enum1 and enum2必须延迟迭代 因为它们有副作用 如何构造第三个枚举器enum3 where enum3 each x x would lazily返回相当于enum1 enum2 在我的现实用例中 我正在流
  • 正确使用JTidy净化HTML

    我正在尝试使用 JTidy jtidy r938 jar 来清理输入 HTML 字符串 但我似乎无法正确设置默认设置 通常 诸如 hello world 之类的字符串在整理后最终会变成 helloworld 我想展示我在这里所做的事情 任何
  • 缓存一致性协议如何强制原子性?

    我知道原子性可以在诸如xsub 不使用LOCK前缀 依靠缓存一致性协议 MESI MESIF 1 缓存一致性协议如何做到这一点 这让我想知道缓存一致性协议是否可以强制原子性 为什么我们需要特殊的原子类型 指令等 2 如果MOSI实现跨多核系
  • Ruby on Rails+PostgreSQL:自定义序列的使用

    假设我有一个模型叫Transaction其中有一个 transaction code属性 我希望该属性自动填充一个序列号 该序列号可能不同于id 例如 与id 1可以有transaction code 1000 我尝试在 postgres
  • 是否有一个不使用回调的 $getJSON 版本?

    我正在为 3rdParty javascript 库实现回调 我需要返回该值 但我需要从服务器获取该值 我需要做这样的事情 3rdPartyObject getCustomValue function return getJSON myUr
  • 表视图控制器每一行连接到不同的视图控制器

    我正在尝试开发一个表视图控制器 其中行连接到多个View Controllers 文本字段 文本视图 表格视图 日期选择器 图像视图等 因此 如果我单击任何行 它应该打开Intermediate View并将适当的控制器放置在一个公共位置
  • Common Lisp 中对象的内存使用情况

    有没有办法找出类或基本数据类型的实例一般使用了多少内存 我在 cl 中有一个玩具网络框架 它使用代表 html 标签及其属性的类实例创建和管理网页 并且由于它们应该创建一个 html 页面 因此它们在称为 children 的插槽中拥有子级
  • 寻找一种方法来动态添加更多列表到 jQuery Mobile 列表视图的底部

    我正在寻找一种在向下滚动后将更多列表添加到列表视图底部的方法 例如 我最初退货了 20 件商品 我打算使用分页 只返回从查询中返回的尽可能多的内容 但我宁愿返回 15 20 然后在滚动结束时自动向此列表添加更多内容 或者有一个按钮显示 查看
  • Angular 2 rc3 路由器弃用包问题

    欢迎 Angular 2 rc 3 I use project json from 5 分钟快速入门配置我的项目 但是当我运行时npm install我收到以下错误 No compatible version found angular e
  • C++20 范围适配器的递归应用导致编译时无限循环

    C 20 中的范围库支持表达式 auto view r std views drop n 删除第一个n范围的元素r与范围适配器drop 但是 如果我递归地从范围中删除元素 编译器将进入无限循环 最小工作示例 在 GCC 10 中编译需要无限
  • TYPO3 - 调用另一个存储库

    是否可以在不同的控制器中调用一个函数 我需要打电话FindByCategoryGrouped catId 在 designRepository php 和getCategories catId 来自categoryRepository ph
  • Terraform:从命令行提供列表输入值?

    有没有办法从命令行提供列表值 地图有变量合并 但它似乎不适用于列表 我希望有类似的东西 但没有运气 谢谢 terraform apply var listvar abc1 var listvar abc2 或者可能 terraform ap
  • Django - 使用从类似 REST 的 API 检索的数据构建报告的应用程序

    我一直在构建一个 Django 应用程序 它使用来自扩展的类似 REST 的 API 的数据 API 是使用 NET 构建的 哎呀 不是我的选择 因为我宁愿挖出我的眼球也不愿学习 Microsoft 工具 我是一个 nix OSX 人 而且
  • 如何设计灵活的Erlang协议栈创建API

    我对当前的方法不满意 只是尝试重新设计在 Erlang 中构建协议栈的方式 该功能按重要性排序 表现 添加新协议变体的灵活性和实施速度 它将有助于开发从 shell 探索协议变体 我当前的型号 这个问题已经描述过除了通过函数调用发送 和通过
  • 寻找适用于 Android、HTC Sense、Samsung 等皮肤的通用 TabHost 样式

    Android TabHost 的默认样式适用于普通 Android 系统 然而 在 HTC Sense 上 他们在深色背景上使用深色文本 这是不可读的 让 TabHost 在所有不同风格的 Android 皮肤中具有可见文本的最简单方法是
  • Let's Encrypt 证书问题:https://www.example.com 无法重定向到 https://example.com

    我为网站生成的证书有问题 此处称为example com 我可以在浏览器中输入http www example com并成功重定向到https example com如我所愿 带有由let s encrypt 我已经使用 Apache2 的
  • Python Plotly 中的默认字体是什么?

    For instance for a graph such as this made with basic plotly code 这里使用的字体是什么 默认字体系列规格是 Open Sans verdana arial sans seri
  • 从 Firestore 集合中检索文档 ID (Android)

    我正在尝试提取文档下自动生成的 ID 以便我可以在其他地方使用它 这是完整的代码 mStartChatButton setOnClickListener new View OnClickListener Override public vo
  • 当 NodeJS 应用程序设计为在客户端上运行时,如何在它的服务器端使用 javascript 库?

    我正在深入研究 NodeJS 和 Express 这对我来说太复杂了 来构建一个实时 Web 应用程序 目前 我正在尝试了解如何在服务器端使用现有的 javascript 库 问题是该库似乎被设计为在客户端运行 因此说明仅向您展示如何在客户
  • 检查是否有东西被malloced

    给定一个指向某个变量的指针 有没有办法检查它是静态分配还是动态分配 引用你的评论 我正在制作一个基本上摆脱结构的方法 它有一个数据成员 它是一个指向可能会或可能不会被分配的东西的指针 根据哪一个 我想释放它 正确的方法是添加another结