参考中是否可能存在分段错误?

2024-01-31

假设有以下代码:

Foo & foo = getFoo();
foo.attr; // 100% safe access?

If foo是一个指针,我会检查它是否是NULL,但是因为它是一个参考,所以这样的检查是不必要的。我想知道的是是否有可能弄乱对象的引用,从而导致访问其属性不安全。

我尝试了一些例子,比如尝试投射NULL to a Foo对象,但我遇到编译错误。我只是想确保上面的代码始终是安全的,并且不存在可能的内部C++我应该知道的黑魔法。

从本杰明的回答中,我可以制作一个示例代码,我确实得到了分段故障 http://en.wikipedia.org/wiki/Segmentation_fault来自参考文献,因此它回答了我的问题。我将粘贴我的代码,以防万一有人对未来感兴趣:

#include <iostream>
using namespace std;

class B
{
    public:
    int x;
    B() {x = 5;}
};
class A
{
    public:
    void f()
    {
        b = *(B*)NULL;
    }
    B & getB()
    {
        return b;
    }

    B b;
};

int main()
{
    A a;
    a.f();

    cout << a.getB().x << endl;
    return 0;
}

是的,这是可能的。

Foo& Fr = *(Foo*)nullptr;

从技术上讲,这已经是取消引用该指针的未定义行为。但它很可能不会导致任何可观察到的错误。但这可能会:

Fr.attr = 10;

然而,正如 Jonathan Wakely 在评论中指出的那样,您没有理由检查这样的案例。如果函数返回无效引用,则该函数已损坏,需要修复。假设引用有效,您的使用代码不会被破坏。然而,有效的参考可以become正如 David Schwartz 的回答中提到的,在完全合法的代码中无效(尽管不为空)。但你没有办法检查这一点。您只需要知道在什么情况下会发生这种情况,然后停止使用该参考。

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

参考中是否可能存在分段错误? 的相关文章

  • 无法使用 strptime() 获取秒数

    我收到 YYYY MM DDThh mm ss S Z hh mm 这种格式的日期时间 我正在尝试使用复制该值strptime如下所示 struct tm time 0 char pEnd strptime datetime Y m dT
  • 部署 MVC4 项目时出错:找不到文件或程序集

    过去 我只需使用 Visual Studio 2012 发布到 AWS 菜单项即可部署我的 MVC4 网站 到 AWS Elastic Beanstalk 现在 程序可以在本地编译并运行 但无法部署 从消息来看 它似乎正在寻找不在当前部署的
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • 自动从 C# 代码进行调试过程并读取寄存器值

    我正在寻找一种方法来读取某个地址的 edx 注册表 就像这个问题中所问的那样 读取eax寄存器 https stackoverflow com questions 16490906 read eax register 虽然我的解决方案需要用
  • Signalr 在生产服务器中总是陷入长轮询

    当我在服务器中托管应用程序时 它会检查服务器端事件并始终回退到长轮询 服务器托管环境为Windows Server 2012 R1和IIS 7 5 无论如何 我们是否可以解决这个问题 https cloud githubuserconten
  • C++ 求二维数组每一行的最大值

    我已经设法用这个找到我的二维数组的每一行的最小值 void findLowest int A Cm int n int m int min A 0 0 for int i 0 i lt n i for int j 0 j lt m j if
  • 使用 C# 在 WinRT 中获取可用磁盘空间

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

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 按字典顺序对整数数组进行排序 C++

    我想按字典顺序对一个大整数数组 例如 100 万个元素 进行排序 Example input 100 21 22 99 1 927 sorted 1 100 21 22 927 99 我用最简单的方法做到了 将所有数字转换为字符串 非常昂贵
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 我的 strlcpy 版本

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

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • C++ 成员函数中的“if (!this)”有多糟糕?

    如果我遇到旧代码if this return 在应用程序中 这种风险有多严重 它是一个危险的定时炸弹 需要立即在应用程序范围内进行搜索和销毁工作 还是更像是一种可以悄悄留在原处的代码气味 我不打算writing当然 执行此操作的代码 相反

随机推荐

  • PHP 依赖注入

    我正在尝试了解依赖注入 并且在很大程度上我理解它 然而 如果由于某种原因 我的一个类依赖于多个类 而不是将所有这些都传递给构造函数中的这个类 是否有更好 更明智的方法 我听说过 DI 容器 这是我解决这个问题的方法吗 我应该从哪里开始使用这
  • 使用 PHPExcel 读取包含合并单元格的 Excel 工作表

    我想完整地阅读 Excel 工作表并使用 AJAX 将每一行发送到另一个页面进行处理 因此 我使用以下代码将 Excel 工作表数据转换为 JSON 数组 参考库中提供的 PHPExcel 示例
  • 如何使一个方法可用于 Rails 中的控制器和模型?

    我的 Rails 应用程序中有一个私有方法来连接到 Amazon S3 执行传递的代码块 然后关闭与 S3 的连接 看起来是这样 def S3 AWS S3 Base establish connection access key id g
  • Tomcat 中 System.setProperty 的范围

    这个问题是 表弟 这个涉及Android https stackoverflow com questions 4483001 scope of system setproperty 但我们在这里Tomcat环境 如果在我的网络应用程序中我设
  • Asp.net core 2 - 文件未发布

    EDIT 有关信息 我正在 macOS 上使用 VS Code 进行开发 我正在尝试将文件包含在我的发布过程中 当前cshtml这代表我的电子邮件模板 我遵循这个thread https github com dotnet sdk issu
  • 为什么 Spring Boot Batch 作业只运行一次?

    我正在使用弹簧靴 我有一个用这些类实现的批处理作业 我的主要课程是 SpringBootApplication ComponentScan com batch PropertySource classpath application pro
  • C++模板:全局对象中的静态成员未初始化

    我有一段简单的 C 代码 其中我通过专门化模板定义了一个模板和一个全局对象 对象构造函数访问专用模板中的静态成员 但事实证明静态成员此时尚未初始化 但对于本地对象 在函数体内定义 它是有效的 我很困惑 我的c 编译器是 g Ubuntu 5
  • 禁用java中的其他声音

    我用 Java 编写了一个程序 使用 pi4j 库在单击 物理 按钮时发出声音 该程序可以工作 但现在它可以互换地播放所有声音 我希望当您单击 2 3 4 或更多按钮时 您只能听到一种声音 这是我希望对您有所帮助的代码 public cla
  • Eclipse 部署程序集 - 在主项目 WEB-INF/lib 内创建依赖项目的 .war?

    我有一个主要的 Web 项目 其中包含部署和通过浏览器访问页面所需的所有内容 然后我有几个 功能 每个功能都是一个单独的项目 可以包含在主项目中 举个例子 我有MainApp and 函数 reportsApp 当构建这些时ant发生以下情
  • 为什么网络浏览器没有内置 jQuery? [复制]

    这个问题在这里已经有答案了 对我来说这似乎是个好主意 或者向 Javascript 本身添加附加功能 因为它只是众多图书馆之一 它可能很受欢迎 但它远不是唯一的选择 它还会导致它冻结在特定版本上并使改进速度慢得多 另外 无论如何也没有什么优
  • org.apache.commons.fileupload.disk.DiskFileItem 未正确创建?

    我正在尝试使用以下示例中显示的代码 创建 DiskFileItem 时出现 java lang NullPointerException https stackoverflow com questions 4120635 java lang
  • 在 bootstrap daterangepicker 中默认选择“本月”范围

    我正在使用 Bootstrap Daterange Picker 它使用以下范围选项 ranges Today moment moment Yesterday moment subtract 1 days moment subtract 1
  • 如何使用 perl 比较日期?

    我如何使用 Perl 比较以下格式的两个日期 dd mon yyyy hh mm ss GMT 例如 2013 年 5 月 12 日 10 10 20 GMT 我无法安装任何外部 Perl 模块 请指教 如果您有 Perl v5 9 5 或
  • 如何使 StackPanel 或 DockPanel 拉伸以适合 WPF 中的容器?

    我有一个Grid作为定义了两列的根容器 只有一行 第一列具有灵活宽度 第二列具有 300px 固定宽度 接下来 我放置了一个ListBox在第二列内部进行水平和垂直拉伸 即填充整个第二列 最后 我定义了一个项目模板ListBox是一个垂直方
  • 在 Windows 7 上更改程序音量

    我想改变程序的音量 而不是master体积 我现在有以下代码 DllImport winmm dll public static extern int waveOutGetVolume IntPtr hwo out uint dwVolum
  • 导入在 __init__.py 中声明的对象

    我无法理解 init py 中声明的对象如何 应该导入到其他文件中 我有一个像这样的目录结构 top lib init py one py 文件内容如下 lib init py a object 库 one py from lib impo
  • 设置正文宽度(以 px 为单位)?

    如何在 JavaScript 中设置以 px 为单位的正文宽度 必须在 chrome ff 和我们心爱的 ie 中工作 edit 当弹出对话框并且隐藏水平滚动条时必须使用它 然后我必须补偿丢失的16px 否则整个网站会稍微向右移动 也许你有
  • Jackson @JsonProperty 注解在 kotlin 数据类中的使用

    科特林 1 2 10 杰克逊模块 kotlin 2 9 0 我在 kotlin 中有以下数据类 data class CurrencyInfo JsonProperty currency info var currencyInfo Curr
  • 从 docker 容器内部连接到主机网络上的 IP 地址

    问题 简短版本 使用 Docker 进行应用程序开发时 如何配置 Docker compose 文件以允许我从 docker 容器内部访问主机网络上服务器的 IP 地址 我不想访问主机本身 而是想访问与主机位于同一网络上的另一台服务器 我还
  • 参考中是否可能存在分段错误?

    假设有以下代码 Foo foo getFoo foo attr 100 safe access If foo是一个指针 我会检查它是否是NULL 但是因为它是一个参考 所以这样的检查是不必要的 我想知道的是是否有可能弄乱对象的引用 从而导致