未对齐的内存访问:是否定义了行为? [复制]

2023-11-25

考虑以下代码:

#include <iostream>

int main()
{
    char* c = new char('a');
    char ac[4] = {'a', 'b', 'c', 'd'};
    unsigned long long int* u = reinterpret_cast<unsigned long long int*>(c);
    unsigned long long int* uc = reinterpret_cast<unsigned long long int*>(&ac[3]);
    *u = 42;
    *uc = 42;
    std::cout<<*u<<" "<<*uc<<std::endl;
}

这是否被认为是有效的代码,或者是内存泄漏/未定义的行为? 我问,因为通过:

*u = 42;
*uc = 42;

我们正在访问程序不应访问的字节(我猜)。


*u = 42;违反严格的别名规则会导致未定义的行为。*u是类型的左值unsigned long long,并且严格的别名规则规定,这只能用于访问对象(已经存在)并且具有类型long long or unsigned long long。但是您的代码使用它来访问数组char.

C++ 没有针对对齐访问的特定规则(与 C 不同)。这是因为在 C++ 中,由于以下原因之一,不可能编写执行未对齐访问而不导致未定义行为的代码:

  • 违反严格的别名规则。
  • 访问不存在对象的内存。
  • 向新的放置提供未对齐的地址。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未对齐的内存访问:是否定义了行为? [复制] 的相关文章

  • 错误:表达式不可赋值三元运算符

    我有以下代码 MPLABX XC8 编译器给出此错误 错误 表达式不可分配 U1ERRIRbits RXFOIF uart1 oerr 1 uart1 oerr 0 这是相关代码部分 typedef union struct bool fe
  • 在 LINQ 查询中进行转换

    是否可以在 LINQ 查询中进行强制转换 为了编译器的缘故 下面的代码并不糟糕 但最好将其放入一个查询中 Content content dataStore RootControl as Controls Content List
  • 使用管道在父级和子级之间传递整数值

    我对如何正确使用 pipeline 在两个进程之间传递整数值有点困惑 在我的程序中 我首先创建一个管道 然后分叉它 我假设我有 两个 管道 据我了解 这是我的任务 我的父母通过 for 循环检查某个操作的整数值 i 增加计数变量 并将值保存
  • 使用 POST 的 HttpWebRequest 的性能

    我有一个用于测试网络服务的小工具 它可以使用 POST 或 GET 调用 Web 服务 使用POST的代码是 public void PerformRequest WebRequest webRequest WebRequest Creat
  • C++中类成员函数相互调用有什么好处?

    我是 C 新手 我发现下面的编程风格对我来说很有趣 我在这里写了一个简化版本 include
  • 从结构调用 C++ 成员函数指针

    我找到了有关调用 C 成员函数指针和调用结构中的指针的信息 但我需要调用结构内部存在的成员函数指针 但我无法获得正确的语法 我在类 MyClass 的方法中有以下代码片段 void MyClass run struct int MyClas
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList
  • Windows Phone 7 - ScrollViewer 值已更改

    我一直在寻找解决方案 但无法找到正确的解决方案 我的网格宽度为 960 并且有ScrollViewer在里面 现在我想知道滚动时滚动的值 水平偏移 我找到的所有解决方案都是针对 wpf silverlight 的 它对我不起作用 Edit
  • C# 结构默认值

    我有一个方法 它接受一个包含许多具有基本数据类型的字段的结构 我想传递大部分默认值 但需要进行一些调整 但我了解结构声明中的基本字段不能包含默认值声明 例如struct S int a 42 现在是这样的 OptionsStruct opt
  • 用于 C++ 中图像分析的 OpenCV 二进制图像掩模

    我正在尝试分析一些图像 这些图像的外部周围有很多噪声 但内部有一个清晰的圆形中心 中心是我感兴趣的部分 但外部噪声正在影响我对图像的二进制阈值处理 为了忽略噪音 我尝试设置一个已知中心位置和半径的圆形蒙版 从而使该圆之外的所有像素都更改为黑
  • X 轴和 Z 轴上的 Quaternion.Slerp,无 Y 轴

    I am trying to rotate the Player about X Y and Z axis The Y axis should not move from last angle Example if I rotate 45
  • ASP.NET - Crystal Report Viewer 打印按钮在 ASP.NET 中不起作用

    我正在使用 Visual Studio 2008 但我遇到了水晶报告问题 当我单击打印按钮时 它会将我带到弹出窗口 但未找到页面 弹出的网址是 http localhost aspnet client System Web 2 0 5072
  • 更改私有模块片段是否会导致模块重新编译?

    On 此页面有关 C 20 模块功能 https www modernescpp com index php c 20 modules private module fragment and header units 我发现了这样的说法 借
  • 使用任一默认捕获模式时,这是通过复制捕获还是 (*this) 通过引用捕获?是一样的吗?

    当我看到以下工作时我有点困惑 struct A void g void f g 但后来我发现this https stackoverflow com a 16323119 5825294答案非常详细地解释了它是如何工作的 本质上 它归结为t
  • 如何在Windows窗体中打开进程

    我想在我的 Windows 窗体应用程序中打开进程 例如 我希望当用户按下 Windows 窗体容器之一中的按钮时 mstsc exe 将打开 如果他按下按钮 它将在另一个容器上打开 IE DllImport user32 dll SetL
  • 从单应性估计 R/T

    我一直在尝试计算 2 个图像中的特征 然后将这些特征传递回CameraParams R没有运气 特征已成功计算并匹配 但是问题是将它们传递回R t 我明白你必须分解Homography为了使这一点成为可能 我已经使用如下方法完成了 http
  • 在 Visual Studio 2012 Express 中设置 C++ 调试环境

    我需要调试的应用程序需要设置环境变量 这在 Visual Studio 2012 中似乎非常复杂 我想做类似的事情 set path c foo c bar c windows c program files application set
  • 使用未命名命名空间而不是静态命名空间

    我可以假设在未命名命名空间中声明的对象相当于static namespace int x 1 static int x 2 FWIK 在这两种情况下 x将具有静态存储期限和内部链接 声明为的对象的所有规则也是如此static适用于未命名名称
  • 让 Windows 尝试读取文件

    我正在对 Windows 文件系统进行某种封装 当用户请求打开文件时 Windows 调用我的驱动程序来提供数据 在正常操作中 驱动程序返回缓存的文件内容 但是 在某些情况下 实际文件没有缓存 我需要从网络下载它 问题是是否有可能让 Win
  • 使用空的weak_ptr作为参数调用map::count安全吗?

    打电话安全吗map count http www cplusplus com reference map map count on an 未初始化因此为空weak ptr http en cppreference com w cpp mem

随机推荐

  • 在 $.ajax 成功中迭代 JSON

    当用户单击按钮时 我想返回一些数据并迭代 JSON 以便可以将结果附加到表行 此时我只是想让我的循环工作 这是我的代码 我的 JSON 返回如下 COLUMNS username password DATA foo bar button c
  • 如何在指定打印机上打印Jasper Reports?

    我想要的只是打印 Jasper 报告 而无需用户选择打印机 我搜索过但没有有效的解决方案 这是我的代码的相关部分 compile to jasper String report JasperCompileManager compileRep
  • forEach 内的异步函数与 js 循环[重复]

    这个问题在这里已经有答案了 可能的重复 javascript 使用一个回调执行一堆异步方法 我已经为这个问题苦苦挣扎了好几天 但我就是想不出一种优雅的方法来处理它 问题就在这里 我正在运行 forEach 循环 我需要知道一切何时完成 由于
  • 将非常大的 int 转换为 double,在某些计算机上会损失精度

    我目前正在学习cpp中的类型间数据转换 我被教导说 对于一个非常大的整数 我们 对于某些计算机 可能会遭受损失 转换为双精度时的精度 但该声明没有提供理由 有人可以提供解释和例子吗 谢谢 假设浮点数使用 N 位存储 现在 我们假设这个浮点数
  • JPA 工作单元克隆中遇到空或零主键

    我了解到JPA并有任务创建数据库并向其中插入一些值 我想知道如何找出最近插入的对象的ID是什么 所以我找到了一种我需要使用的方法flush的方法EntityManager 不幸的是我得到了 工作单元克隆中遇到空或零主键 当我使用上述方法时出
  • 如何检查 NSNumber 中的空值

    首先我承认我的无知 在我从事项目的几个月里 我已经学到了关于 Objective C 的一切 我还发现 Objective C 似乎使我使用过的任何其他语言中的简单问题变得复杂 这非常令人沮丧 这个问题就是一个例子 在第一次运行中 我的应用
  • 在 Android Lollipop 上使用 NFC 激活设备所有者

    我正在尝试使用 NFC 在设备上设置设备所有者包 Lollipop 概述中提到了here 要部署并激活设备所有者 您必须执行 NFC 数据 当设备处于运行状态时从编程应用程序传输到设备 其未配置状态 此数据传输发送相同的信息 如托管配置中描
  • 如何从完整的文件名列表中删除文件扩展名?

    我正在使用以下命令来获取包含名为的目录中的所有文件的列表tokens import os accounts next os walk tokens 2 Output gt gt gt print accounts DS Store Amie
  • MFC 应用程序到 Unicode/MBCS 的分段转换

    我有一个大型 MFC 应用程序 我正在扩展它以允许多语言输入 目前 我需要允许用户在单个对话框的编辑框中输入 Unicode 数据 有没有办法在不为整个应用程序打开 UNICODE 或 MBCS 的情况下执行此操作 我目前只需要转换应用程序
  • 使用 myclass::operator<(myclass &other) 对 std::list 进行排序

    我有一个std list
  • Xcode 4:使用 Git 存储库提交版本在每个构建上更新 CFBundleVersion

    我将 Xcode 4 与 Git 结合使用 并希望在每次构建时增加 Info plist 中的 CFBundleVersion CFBundleVersion 键的值应更新为我对 Git 存储库所做的最后一次提交的编号 I found th
  • 从函数内部获取所有函数参数的列表

    有没有办法得到all函数内部的函数参数 match call 不返回设置了默认值但未被覆盖的参数 例如 xf lt function a b Hi c TRUE print as list match call expand dots FA
  • 公开 dll 以进行 COM 互操作

    我以为我知道如何做到这一点 但显然不知道 所以我希望得到一些帮助 我无法让我的 dll 注册 因此我无法在 VBS 或其他地方实例化它 我编写了以下示例类 选中 使程序集 COM 可见 选中 注册 COM 互操作 然后构建它 当我尝试从 V
  • 不使用媒体播放器播放视频 [Winform]

    我想像那个人一样播放视频 link 我正在开发 C Windows 窗体应用程序 不是 NXA 但我不知道怎么办 我尝试使用Microsoft DirectX AudioVideoPlayback但没有运气 这是我到目前为止所尝试的 Ope
  • Spring Boot 仅在单元测试中返回错误的状态代码

    我正在使用 Spring Boot 开发 REST API 我有一个控制器来创建一个新用户 当创建用户时它会响应 201 CREATED 响应没有正文内容 使用 Postman 或任何浏览器 我收到 201 响应 但是当我尝试使用单元测试
  • 如何将 Visual Studio Code 终端输出设置为英语

    我的环境是 Visual Studio 代码 英语 Windows 10 日语 当我尝试使用终端添加包时 它以日语输出消息 但我希望它能用英语输出它们 我已经找到了解决方案 由于终端使用PowerShell 因此我们应该设置powershe
  • 将图像分割成更小的图像的算法,减少空白量并指定最大矩形量

    我正在寻找一种算法 可以将图像分割成更小的图像 但有一些限制 一个限制是使用最少量的 空白 即空像素 另一个是指定将其分割成的最大图像数量 例如 让我们看一下下图 其中有很多 空白 我想将此图像分成几个其他图像 这样我就可以减少该图像占用的
  • 如何在Android中播放歌曲-phonegap [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 目前不接受答案 一个月前 我开始使用phonegap html5 css3 和jQtouch 我正在开发一个应用程序 我需要在该应用程序中播放声音 我对这项任务有一个严重的问题 首先 我发现
  • asp.net sessionID 在回发时发生变化?

    我正在编写一个在缓存中存储对象的 ASP NET 应用程序 当页面第一次加载时 它会检查缓存中是否有该对象 如果存在 它将使用该对象 如果该对象不存在 它将重新构建它并将其存储在缓存中 由于多个用户可以同时使用此应用程序 因此我尝试将对象存
  • 未对齐的内存访问:是否定义了行为? [复制]

    这个问题在这里已经有答案了 考虑以下代码 include