C 标准 malloc 字符的潜在问题

2023-11-26

在回答我的另一个答案的评论时here,我找到了我所想的may是 C 标准中的一个漏洞(c1x,我没有检查过早期的标准,是的,我知道在这个星球上的所有居民中,只有我一个人发现了标准中的错误,这是难以置信的)。信息如下:

  1. 第 6.5.3.4 节(“sizeof 运算符”)第 2 段指出"The sizeof operator yields the size (in bytes) of its operand".
  2. 该节第 3 段规定:"When applied to an operand that has type char, unsigned char, or signed char, (or a qualified version thereof) the result is 1".
  3. 第 7.20.3.3 节描述void *malloc(size_t sz)但它说的是"The malloc function allocates space for an object whose size is specified by size and whose value is indeterminate"。它根本没有提及参数使用什么单位。
  4. 附件E开始的8是minimum价值CHAR_BIT所以字符的长度可以超过一个字节。

我的问题很简单:

在 char 为 16 位宽的环境中,将malloc(10 * sizeof(char))分配 10 个字符(20 个字节)还是 10 个字节?上面的第1点似乎表示前者,第2点表示后者。

有比我更了解 C-standard-fu 的人对此有答案吗?


在 16 位char环境malloc(10 * sizeof(char))将分配10chars(10 字节),因为如果char是 16 位,那么该架构/实现将一个字节定义为 16 位。 Achar不是八位位组,而是一个字节。在较旧的计算机上,该值可能大于 8 位de-facto我们今天的标准。

C 标准的相关部分如下:

3.6 术语、定义和符号

字节 - 数据存储的可寻址单元,足够大,可以容纳执行环境基本字符集的任何成员...

注 2 – 字节由连续的位序列组成,其数量由实现定义。

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

C 标准 malloc 字符的潜在问题 的相关文章

  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • fgets() 和 Ctrl+D,三次才能结束?

    I don t understand why I need press Ctrl D for three times to send the EOF In addition if I press Enter then it only too
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 如何针对 Nancy 中的 Active Directory 进行身份验证?

    这是一篇过时的文章 但是http msdn microsoft com en us library ff650308 aspx paght000026 step3 http msdn microsoft com en us library
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 初始化变量的不同方式

    在 C 中初始化变量有多种方法 int z 3 与 int 相同z 3 Is int z z 3 same as int z z 3 您可以使用 int z z 3 Or just int z 3 Or int z 3 Or int z i
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 远程 gdb 调试不会在断点处停止

    我在调试修改后的 Linux 3 11 0 内核时遇到问题 为了调试代码 我使用 GDB 7 6 QEMU 1 6 5 Linux内核3 11 0 我的系统有 Intel R Core TM i7 2760QM CPU 2 40GHz 运行
  • “aapt”错误。预编译器构建中止

    我使用 Eclipse 4 2 2 和 Android SDK 22 0 1 构建一个使用 Facebook 和 Google Play 服务库的 Android 应用程序 然而我遇到了一个问题 每次我包含一个或两个库时 aapt 详细模式
  • 文件上传在 Primefaces 中不起作用

    我有一些问题
  • Spring-boot+JPA EntityManager注入失败

    在我的 J2EE 应用程序中 我尝试使用 spring boot 和 JPA 技术 并将 EntityManager 注入到 DAO 层 但是 我有一些问题 我的用户 CRUD 存储库 Repository public class Use
  • 推荐放置小型 python 便利模块的位置在哪里

    我收集了一小部分方便的临时脚本 我希望在我的所有 python 项目和 ipython 交互式会话中都可以使用它们 我想添加并清理这个集合 而不必担心制作 setup py 文件并正式安装它们 默认情况下 从 sys path 上的目录列表
  • php echo 中的 \n 或 \n 不打印[重复]

    这个问题在这里已经有答案了 可能的重复 在 PHP 中用单引号打印换行符 php中单引号和双引号字符串的区别 unit1 paragrahp1 unit2 paragrahp2 echo p unit1 p n echo p unit2 p
  • Backbone.js 获取更复杂的数据并用作集合

    假设我有这样的 json 设置 page 1 items name item1 id 1 name item1 id 2 name item1 id 3 还有这样的建模 var Item Backbone Model extend defa
  • Codeigniter - 无法修改标头信息 - 标头已发送

    A PHP Error was encountered Severity Warning Message Cannot modify header information headers already sent by output sta
  • 正则表达式:验证具有多个分隔符的欧洲日期格式

    我想验证欧洲日期格式 例如 10 02 2012 或 10 02 2012 因此我创建了以下正则表达式 d 0 9 2 d 0 9 2 d 0 9 4 不幸的是 即使日期的格式正确 我总是收到无效的消息 当我将 替换为 时仅验证用点分隔的日
  • 在大写字母处插入或分割字符串 Objective-c

    在 Objective C 中将 ThisStringIsJoined 之类的字符串转换为 This String Is Joined 最有效的方法是什么 我从不受我控制的网络服务收到这样的字符串 我想将数据呈现给用户 所以我想通过在每个大
  • Oauth 导入错误

    我在用Python on windows使用相同的代码 它工作得很好 现在它突然发生了更新程序的变化 我发现了错误导入错误 无法将名称导入到 native string你能帮我看看为什么会出现这个错误吗 Traceback most rec
  • Android NDK 调试

    对于我来说 Android NDK 文档似乎不太清楚如何运行命令序列来将调试信息放入和取出提供的 ndk gdb 可执行文件 如果有关于在什么行上中断以及在什么文件中中断的格式 是否有某个地方有规范 如果是这样 那么您如何向该调试器提供该信
  • 我可以使用 Html Agility Pack 来解析 HTML 片段吗?

    Html Agility Pack 可以用来解析 html 字符串片段吗 Such As var fragment b Some code b 然后全部提取 b 标签 到目前为止我看到的所有示例都是像 html 文档一样加载的 如果是 ht
  • 如何访问qt上的父小部件?

    我有一个继承的 QTreeWidget 称为 PackList 类 其父类是 KXmlGuiWindow 我怎样才能访问父级的插槽 我已经尝试过 QTreeWidget 类中的 getParent gt mySlot 但我有 error n
  • 访问私有变量的单元测试

    我有一个单元测试课Tester 我希望它访问 a 的私有字段Working class class Working private int m variable class Tester void testVariable Working
  • GitPython 通过 sha 获取树和 blob 对象

    我正在将 GitPython 与裸存储库一起使用 并尝试通过其 SHA 获取特定的 git 对象 如果我直接使用git 我会这样做 git ls tree sha of tree git show sha of blob 由于我使用 Git
  • 如何创建一个 npm 脚本来运行多个命令来运行一些测试?

    当我为 angularjs 应用程序运行 e2e 测试时 我需要在不同的 shell 会话中运行以下命令 start the selenium server webdriver manager start start a http serv
  • 如何为属性创建 TypeScript @enumerable(false) 装饰器

    我想在 TypeScript 中创建一个装饰器 以便能够使类属性不可枚举 我找到了一个例子 enumerable here https www typescriptlang org docs handbook decorators html
  • Mac 上的 file_exists() 是否区分大小写?

    首先 Mac OS X 不是我的原生操作系统 但由于我对 Ubuntu 很熟悉 所以在很大程度上 它是一个轻松的过渡 由于它是基于 Unix 的 所以我的印象是这个操作系统区分大小写 但是file exists 函数另有说法 在我的 htd
  • C 标准 malloc 字符的潜在问题

    在回答我的另一个答案的评论时here 我找到了我所想的may是 C 标准中的一个漏洞 c1x 我没有检查过早期的标准 是的 我知道在这个星球上的所有居民中 只有我一个人发现了标准中的错误 这是难以置信的 信息如下 第 6 5 3 4 节 s