取消引用 cout 指针时的 C++ SegFault

2023-12-22

我是 C++ 新手,只是想掌握它。通常看起来还不错,但我偶然发现了这种奇怪/病态的段错误行为:

int main () {
  int* b;
  *b = 27;
  int c = *b;
  cout << "c points to " << c << endl; //OK                                                                                                                                      
  printf( "b points to %d\n", *b); //OK                                                                                                                                          
  // cout << "b points to " << (*b) << endl; - Not OK: segfaults!                                                                                                               
  return 0;
}

正如所给出的,该程序会产生您所期望的结果:

c points to 27
b points to 27

另一方面,如果取消倒数第二行的注释,则会得到一个在运行时崩溃(段错误)的程序。为什么?这是一个有效的指针。


int* b指向未知的内存地址,因为它尚未初始化。如果您将其初始化为编译器存在的任何空指针值(0直到 C++11,nullptr在 C++11 及更高版本中),您肯定会更早地遇到段错误。问题在于您为指针分配了空间,但没有为它指向的数据分配空间。如果你这样做:

int c = 27;
int* b = &c;

cout << "c points to " << c << endl;
printf ("b points to %d\n", *b);
cout << "b points to " << (*b) << endl;

事情会成功,因为int* b指的是程序可以访问的内存位置(因为内存实际上是程序的一部分)。

如果您未初始化指针或为其分配空值,则在它指向您知道可以访问的内存地址之前,您将无法使用它。例如,使用动态分配new操作员将为您保留数据的内存:

int* b = new int();
*b = 27;
int c = *b;

//output

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

取消引用 cout 指针时的 C++ SegFault 的相关文章

  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 由 IHttpClientFactory 注入时模拟 HttpClient 处理程序

    我创建了一个自定义库 它会自动为依赖于特定服务的 Polly 策略设置HttpClient 这是使用以下方法完成的IServiceCollection扩展方法和类型化客户端方法 一个简化的例子 public static IHttpClie
  • 将 Word 文档另存为图像

    我正在使用下面的代码将 Word 文档转换为图像文件 但是图片显得太大 内容不适合 有没有办法渲染图片或将图片保存到合适的尺寸 private void btnConvert Click object sender EventArgs e
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • Qt - ubuntu中的串口名称

    我在 Ubuntu 上查找串行端口名称时遇到问题 如您所知 为了在 Windows 上读取串口 我们可以使用以下代码 serial gt setPortName com3 但是当我在 Ubuntu 上编译这段代码时 我无法使用这段代码 se
  • 如何在 Xaml 文本中添加电子邮件链接?

    我在 Windows Phone 8 应用程序中有一些大文本 我希望其中有电子邮件链接 例如 mailto 功能 这是代码的一部分
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • CMake 无法确定目标的链接器语言

    首先 我查看了this https stackoverflow com questions 11801186 cmake unable to determine linker language with c发帖并找不到解决我的问题的方法 我
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 使用管道时,如果子进程数量大于处理器数量,进程是否会被阻塞?

    当子进程数量很大时 我的程序停止运行 我不知道问题是什么 但我猜子进程在运行时以某种方式被阻止 下面是该程序的主要工作流程 void function int process num int i initial variables for
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock

随机推荐

  • 如何让内容占据100%的高度和宽度

    我已经很接近了 但我无法让它像我想要的那样工作 我试图让标题和菜单始终可见 并使内容占据视图屏幕的其余部分 并在溢出时拥有自己的滚动条 问题是内容的宽度没有被拉伸到右侧 并且我在页面中间出现了一个滚动条 我也无法让它占据剩余窗口高度的其余部
  • 智能指针作为多态性的类成员

    我是智能指针的新手 如果有人能给我提示我作为类成员处理智能指针的方式是否正确 我将非常感激 更准确地说 我想要实现的解决方案是在类多态性的背景下实现的 并且理想情况下应该是异常安全的 Given a 异构对象的容器 http www par
  • 来自 BLL 中的一种方法的跨多个 DAL 方法的事务

    您将如何从业务逻辑层中的一个方法调用数据访问层中的多个方法 以便所有 SQL 命令都存在于一个 SQL 事务中 每个 DAL 方法都可以从 BLL 中的其他位置单独调用 因此不能保证数据层方法始终是事务的一部分 我们需要此功能 因此如果数据
  • @StringRes、@DrawableRes、@LayoutRes等android注解lint检查与kotlin参数

    假设您有这样的带有默认参数的数据类 data class Info DrawableRes val iconRes Int 0 StringRes val stringRes Int 0 LayoutRes val layoutRes In
  • 无法解析符号“RequestQueue”

    我是 android studio 和 volley 库的新手 所以请耐心等待 我通过 GitHub 添加了 volley 库 然后添加了这一行来构建 gradle 文件 compile com android support appcom
  • 查找对象数组中最后一个匹配的对象

    我有一系列对象 我需要获取最后一个对象的对象类型 本例中为 形状 将其删除 然后找到数组中具有相同类型的前一个对象的索引 例如 形状 var fruits shape round name orange shape round name a
  • JSP中页面

    我收到了一项向 HTML 页面 JSP 添加功能的任务 该页面仅来自设计师 前端开发人员 因此在某些地方我需要更改a href to button or input但这会造成混乱 所有设计都改变了 这是一段代码 div class col
  • 如何绘制三列数据的热图

    我有三列文件 500 万行 它像是 x y z 3 4 6 7 9 4 7 8 X 和 y 是像素编号 z 是 x y 处的对应值如何绘制热图 二维图是我最初想法的妥协 你可以查看我的原帖如何使用 scipy interpolate 中的
  • 去打印大量

    我目前正在做 Go Lang 教程 准确地说是 数字常量 示例代码以以下语句开头 const Create a huge number by shifting a 1 bit left 100 places In other words t
  • 使用here()函数向上一级目录

    我想让这里的函数在开始下降目录级别之前上升一个级别 例如 我的项目位于目录 parent project root 中 因此here 将此视为默认目录 我想在 parent other dir 中读取一些数据 我需要传递什么参数到here
  • Elasticsearch:嵌套查询中的脚本字段

    有没有办法在嵌套查询中使用 script fields 将字段添加到返回的inner hits 例子 nested inner hits path companies score mode sum query script fields o
  • joblib中的batch_size和pre_dispatch到底是什么意思

    从这里的文档https pythonhosted org joblib parallel html parallel reference documentation https pythonhosted org joblib paralle
  • 编译器会优化转义内循环吗?

    我的代码如下所示 显示了完成的所有用法 bool done false for int i 0 i lt big i for int j 0 j lt wow j if foo i j done true break if done bre
  • TinyIoC:在单个实例上注册多个接口

    Autofac 允许使用 AsImplementedInterfaces 或链式 As 调用与 SingleInstance 轻松地将多个接口解析为同一实例 这也可以用 TinyIoC 来完成吗 我只找到了如何注册同一接口的多个实现 但没有
  • 持久存储的核心数据错误

    我正在尝试使用核心数据从模型加载简单数据并将其放入表视图中 这是我的持久存储的以下代码 AppDelegate m NSPersistentStoreCoordinator persistentStoreCoordinator if per
  • 返回 JSF 页面上的图像列表

    我有一个用户可以从中选择的项目的下拉列表 视图是 JSF 我希望在用户从下拉列表中选择一个项目后 图像出现在同一个 JSF 页面上 即用户从下拉列表中选择单词 Cat 并且出现一组不同的猫图像 我该如何在 JSF 中编写此代码 注意 我使用
  • 如何在 Bash 或 Unix shell 中检查字符串中的第一个字符?

    我正在 Unix 中编写一个脚本 其中我必须检查字符串中的第一个字符是否为 如果是 则分支 例如 我有一个字符串 some directory file 我希望它返回 1 并且 email protected cdn cgi l email
  • python selenium 检查此文本字段是否被禁用

    这是已从 UI 禁用的文本区域的 html 代码 div class ftnt input div
  • OpenShift 并在 .htaccess 中重定向

    我在 OpenShift 上部署了一个 Wordpress 应用程序并关联了一个域别名 即 www example org 现在我想添加另一个别名 即 www example2 org 并优雅地重定向来自 www example org g
  • 取消引用 cout 指针时的 C++ SegFault

    我是 C 新手 只是想掌握它 通常看起来还不错 但我偶然发现了这种奇怪 病态的段错误行为 int main int b b 27 int c b cout lt lt c points to lt lt c lt lt endl OK pr