如何打印悬空指针以进行演示?

2024-01-03

我试图向某人解释为什么他们有一个悬空指针以及 free 实际上是如何工作的(指针是值,因此是按值传递的),但为此我认为我需要一种打印指针的方法t“不确定”(就像这样printf("%p", ptr)).

memcpy 可以解决这个问题吗?

char buf1[sizeof(char *)];
char buf2[sizeof(char *)];
char *malloced = malloc(10);
memcpy(buf1, &malloced, sizeof(char *));
free(malloced);
memcpy(buf2, &malloced, sizeof(char *));
for (int i=0; i<sizeof(char *); i++) {
    printf("%hhd %hhd / ", buf1[i], buf2[i]);
}

根据对 C 标准的严格解读,你不能用悬空指针做任何事情:“不确定”,保存悬空指针的内存状态,也描述了未初始化的自动变量的内容,这些如果您连续读取两次,可能会有不同的值 https://godbolt.org/g/UyL4sZ(*).

解决这个问题的唯一方法是将指针转换为uintptr_t 虽然它仍然有效。转换的结果是一个整数,并且具有整数的属性:

#include <stdint.h>
...
char *malloced = malloc(10);
uintptr_t ptr_copy = (uintptr_t) malloced;
...
free(malloced);
// it is valid to use ptr_copy here to display what the address was.
printf("The pointer was at: %" PRIxPTR "\n", ptr_copy);

(*) C11标准区分自动变量未获取其地址(“可以使用寄存器存储类声明”) https://port70.net/~nsz/c/c11/n1570.html#6.3.2.1p2, but 铿锵不关心 https://godbolt.org/g/bdwCmu.

具体回答您的使用建议memcpy, note that memcpy不确定的记忆产生不确定的记忆 https://godbolt.org/g/tWLTir.

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

如何打印悬空指针以进行演示? 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • SQL Server FileStream如何填充文件流列

    我遇到了几种将数据插入 SQL Server 对于 FileStream 的不同方法 插入 FileStream 对象的最佳方法是什么 以下方法之间的主要区别是 一种方法直接进行插入 另一种方法放置 FileStream 对象的占位符 一种
  • 如何模拟对 pyspark sql 函数的内部调用

    得到以下 pyspark 代码 import pyspark sql functions as F null or unknown count df sample 0 01 filter F col env isNull F col env
  • C 中的硬编码字节数组

    我正在调试一个网络应用程序 我必须模拟一些交换的数据才能使应用程序正常工作 在 C 中你可以做类似的事情 char myArray 0x00 0x11 0x22 但是 我似乎找不到此语法的 C 等效项 基本上我只想用硬编码值填充数组 你可以
  • 观看指令内的 ng-model

    我有以下指令 directive myInput function return restrict AE scope id label type value templateUrl directives dc input html link
  • Faraday vs HTTParty [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • C++ 函数式,带有泛型参数的 std::function

    我尝试编写一个 forEach 方法 我知道该方法已经存在 但我会自己尝试 这是我的代码 include
  • 将位置参数作为 args 和可选参数作为 kwargs 整齐地从 argparse 传递到函数

    我想编写一个Python脚本 它通过以下方式获取一些必要的位置和一些可选的命令行参数argparse 让我们调用位置参数a b c 以及可选参数x y z 在我的 Python 脚本中 我想将这些参数传递给一个函数 具体来说 我想要a b
  • 流畅的 NHibernate 映射

    我是 NHibernate 和 Fluent NHibernate 的新手 假设我有如下情况 Table Activities uniquidentier ID varchar ActivityName Table ActivityPara
  • 为什么 Azure 应用程序网关需要空子网

    当我尝试执行 New AzureRmApplicationGatewayIPConfiguration 来创建应用程序网关时 出现异常 Subnet xxx cannot be used for application gateway yy
  • 单元测试 Modelica 组件库?

    我正在 Modelica 中创建一个组件库 并且希望获得一些有关对包进行单元测试的技术的意见 到目前为止 我有一个测试包 由一组模型组成 每个组件一个模型 每个测试模型都会实例化一个组件 并将其连接到一些非常简单的帮助器类 这些类提供必要的
  • MVC 4:验证失败时返回引导模式内部的部分视图

    我正在使用 MVC 4 和 SimpleMembership 用于帐户处理 当用户登录网页时 我正在使用 Boostrap V3 2 0 模式 模态工作正常 甚至通过 Ajax BeginForm 处理 Modelstate 验证我遇到的问
  • 设计控制器导轨

    我在 ruby 1 8 7 上使用 Rails 3 并用于身份验证 设计 1 1 3 但这是我正在构建的一个相当大的社区网站 因此我有一个用于配置文件的表和一个用于用户的表 每次用户注册时 它也应该生成一个配置文件 但在设计中我不允许使用控
  • SCons 无法选择编译器(MinGW)[重复]

    这个问题在这里已经有答案了 我有一个简单的 SConstruct 文件 其中包含以下代码 path C MinGW bin env Environment ENV PATH path Program target myprogram sou
  • 在 Kivy 中显示 numpy/opencv/matplotlib 图像

    如何在 Kivy 中以标准 numpy opencv matplotlib 格式显示图像 Kivy 使用不同的图像内存布局 我不知道是哪一种 下面的代码完全可以正常工作 图像是使用 cv2 VideoCapture 捕获的 我认为图像是BG
  • Windows XP 上的 Vb6 http post 请求

    我在使用 VB6 发送 POST 请求时遇到问题 下面的代码在 Windows7 上运行正常 但在 Windows XP 上运行时没有任何运行时错误 并且发送数据包 但看起来没有在数据包中附加发布数据 我的代码是这样的 Set xmlhtt
  • 如何在 Windows 上设置 Python 2.6 的安装工具?

    有没有办法在 Windows 中安装 Setuptools for Python 2 6 而无需 exe 安装程序 目前还没有构建这个工具 Setuptools 的维护者表示 他可能需要一段时间才能实现它 有谁知道安装它的方法吗 第一个选项
  • 获取StorageFolder中的文件数量

    我正在使用 Windows Phone 8 1 RT 应用程序 我想知道如何获取StorageFolder 内的文件数量 我知道我们可以使用StorageFolder GetFilesAsync 然后检查返回的列表的计数 但由于此方法花费的
  • SSIS 配置连接字符串

    我的一些包裹遇到了问题 基本布局是连接字符串存储在数据库中的 SSIS 配置表中 我最近注意到 oledb 连接的服务器名称似乎保持静态 我看到过将包从一个环境移动到另一个环境时验证失败的情况 如果我将密码更改为第一个环境中使用的密码 它将
  • 获取一个返回两个整数的函数

    我正在编写一个函数 我希望它返回两个整数作为结果 但是 我无法让它做到这一点 有人可以帮助我吗 这是我最好的镜头 public static int calc int s int b int c int d int g if s g ret
  • 如何打印悬空指针以进行演示?

    我试图向某人解释为什么他们有一个悬空指针以及 free 实际上是如何工作的 指针是值 因此是按值传递的 但为此我认为我需要一种打印指针的方法t 不确定 就像这样printf p ptr memcpy 可以解决这个问题吗 char buf1