在静态变量初始化中使用 cout 时出现 C++ 分段错误

2024-01-08

我有一个程序,我使用 cout 来发出调试信息。该代码在静态全局变量的初始化中执行,即在程序执行的早期执行。当我使用自己的构建脚本构建程序时,它在第一次使用 cout 时出现段错误(仅将字符串文字移入 cout,因此它不能是值)。我使用 valgrind 检查早期对无效位置的写入,但没有(并且也没有可能生成这些写入的代码,我在输出之前没有做太多事情)。当我将源代码复制到 Eclipse 项目并让 Eclipse 内置构建器构建它时,一切正常。我没有使用任何奇怪的构建器设置,只是简单地编译了-ggdb -std=c++0x,这是仅有的两个标志。

那么,如果之前没有无效写入,那么带有字符串文字的 cout 出现段错误的原因可能是什么?构建配置如何影响这一点?

(很抱歉,我无法给您提供最小的示例,因为这个示例可以在您的计算机上正常编译,就像使用 eclipse 构建器时对我来说一样)

编辑:这是堆栈跟踪:

0x00007ffff7b6d7d1 in std::ostream::sentry::sentry(std::ostream&) () from /usr/lib   /x86_64-linux-gnu/libstdc++.so.6
(gdb) backtrace
#0  0x00007ffff7b6d7d1 in std::ostream::sentry::sentry(std::ostream&) () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#1  0x00007ffff7b6dee9 in std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long) ()
from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#2  0x00007ffff7b6e2ef in std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) ()
  from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00000000004021be inTest::fill (this=0x6120f8, funcs=...) at inTest.cpp:92

最后一帧是我的代码。第 92 行简单地写着:

std::cout << "Test";

正如 Luchian 指出的,你不能使用std::cout在第一个之前 的实例ios_base::Init已建成。你不必 但是,定义一个实例;包括<iostream>应该足够了。

初始化顺序is在单个翻译单元内定义。 如果你包括<iostream>在所有具有静态的文件的顶部 实例,你应该没问题。如果静态对象的构造函数 然而,调用另一个翻译单元中的函数,输出是 在该翻译单元中,仅包含以下内容是不够的<iostream>仅在执行输出的翻译单元中。您必须包含它 在定义静态变量的翻译单元中。甚至 如果他们不做任何输出。

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

在静态变量初始化中使用 cout 时出现 C++ 分段错误 的相关文章

  • 如何使用 Entity Framework 和 Identity 解决对象处置异常 ASP.NET Core

    我正在尝试编写一个控制器 该控制器接收来自 AJAX 调用的请求并通过 DBContext 对数据库执行一些调用 但是 当我发出命令时var user await GetCurrentUserAsynch 在对 DBContext 的任何调
  • 更新 Azure Blob 上的 LastModified

    我正在移植代码以使用 C 中的 Azure 存储 SDK 传统上 我称其为更新修改文件的上次写入 修改时间 File SetLastWriteTimeUtc fileName lastWriteTimeUtc 要更新 blob 的上次修改时
  • Qt/c++ 随机字符串生成[重复]

    这个问题在这里已经有答案了 我正在创建一个应用程序 需要生成多个随机字符串 几乎就像一个由一定长度的 ASCII 字符组成的唯一 ID 这些字符混合有大写 小写 数字字符 有没有 Qt 库可以实现这一点 如果没有 在纯 C 中生成多个随机字
  • C# 中类似图的实现

    所以我有一个对象 我们称之为 Head 它有一个对象列表 C C1 C2 C3 T T1 T2 和 M M1 M2 并且所有这些都是相互关联的 例如 Head gt C1 C2 C3 T1 T2 M1 M2 T1 gt C1 C2 T2 g
  • C# 中 PKCS11Interop 库的线程安全使用 [已关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 PKCS11Interop 在 HSM 内执行密钥管理操作 我使用的 HSM 是 Thales PCI Express 下面是
  • 如何从不同的线程访问控件?

    如何从创建控件的线程以外的线程访问控件 避免跨线程错误 这是我的示例代码 private void Form1 Load object sender EventArgs e Thread t new Thread foo t Start p
  • 为什么像 BindingList 或 ObservableCollection 这样的类不是线程安全的?

    我一次又一次发现自己必须编写 BindingList 和 ObservableCollection 的线程安全版本 因为当绑定到 UI 时 这些控件无法从多个线程更改 我想理解的是why情况就是这样 这是设计错误还是故意的 问题是设计一个线
  • 在 .NET Core 中从 HttpResponseMessage 转换为 IActionResult

    我正在将之前在 NET Framework 中编写的一些代码移植到 NET Core 我有这样的事情 HttpResponseMessage result await client SendAync request if result St
  • FluentAssertions ShouldNotThrow 无法识别异步方法/Func

    我正在尝试检查异步方法是否抛出具体异常 为此 我使用 MSTEST 和 FluentAssertions 2 0 1 我已经检查过这个关于 Codeplex 的讨论 http fluentassertions codeplex com wo
  • 检查两个函数或成员函数指针的签名是否相等

    我编写了一些代码来检查自由函数的签名是否等于成员函数的签名等 它比较提取的返回类型和函数参数 include
  • 列表到优先队列

    我有一个 C 大学编程项目 分为两个部分 在开始第二部分时应该使用priority queues hash tables and BST s 我 至少 在优先级队列方面遇到了麻烦 因为它迫使我自己重做第一部分中已经实现的许多代码 该项目是关
  • ASP.net WebForms - 在标记中使用 GetRouteUrl

    我一直在尝试弄清楚如何将路由功能与 ASP net 4 0 WebForms 一起使用 我将一条路线添加到我的路线集合中 void Application Start RegisterRoutes RouteTable Routes voi
  • Windows 上本机 C++ 应用程序中的自动死代码检测?

    背景 我有一个用原生 C 编写的应用程序 花了几年的时间 大约有 60 KLOC 有很多函数和类已经死了 可能有 10 15 就像下面提出的类似的基于 Unix 的问题 我们最近开始对所有新代码进行单元测试 并尽可能将其应用于修改后的代码
  • 意外的 const 引用行为

    include
  • 基础设施 - 同步和异步接口和实现? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在实现库 基础设施时 并且该 API 的用户希望同步和异步使用代码 我读到混合同步和异步并不是一个好主意 例如 同步实现包括等待异步实现 显然
  • 如何通过代理将套接字连接到http服务器?

    最近 我使用 C 语言编写了一个程序 用于连接到本地运行的 HTTP 服务器 从而向该服务器发出请求 这对我来说效果很好 之后 我尝试使用相同的代码连接到网络上的另一台服务器 例如 www google com 但我无法连接并从网络中的代理
  • 为什么 C++ 标准没有将 sizeof(bool) 定义为 1?

    Size of char signed char and unsigned char由 C 标准本身定义为 1 个字节 我想知道为什么它没有定义sizeof bool also C 03 标准 5 3 3 1 说 sizeof char s
  • 使用任务的经典永无止境的线程循环?

    给出了一个非常常见的线程场景 宣言 private Thread thread private bool isRunning false Start thread new Thread gt NeverEndingProc thread S
  • 在 C# 中使用自定义千位分隔符

    在显示字符串时 我尝试不使用 字符作为千位分隔符 而是使用空格 我想我需要定义一种自定义文化 但我似乎做得不对 有什么指点吗 例如 将 1000000 显示为 1 000 000 而不是 1 000 000 no String Replac
  • 创建进程默认浏览器

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 我想获取线程 id 因此 ShellExecute 无法获取线程 id 因此我开始使用

随机推荐

  • 在调用者线程中捕获线程的异常?

    总的来说 我对 Python 和多线程编程非常陌生 基本上 我有一个脚本可以将文件复制到另一个位置 我希望将其放置在另一个线程中 以便我可以输出 表明脚本仍在运行 我遇到的问题是 如果无法复制文件 它将引发异常 如果在主线程中运行 这是可以
  • mod_rewrite - 将不存在的所有内容发送到index.php

    我想让我的 htaccess 文件重写 index php 文件中不存在的任何内容 例如 www example com category subcategory product1 将被重写为index php request catego
  • 恢复 SQL Server 2008 数据库后出现“无效的对象名称”

    我正在切换我的网络主机并备份我的数据库 由于我的新主机的一些限制 我无法恢复 bak 文件 必须发送给他们以便他们恢复它 一旦他们恢复了它 我运行了我的应用程序 我得到了这个 System Data SqlClient SqlExcepti
  • 从多通道 wav 文件中读取单个通道

    我需要从包含最多 12 个 11 1 格式 通道的 wav 文件中提取单个通道的样本 我知道在正常的立体声文件中样本是交错的 先向左 然后向右 就像这样 1st L 1st R 2nd L 2nd R 所以 要阅读左频道 我会这样做 for
  • Keras 语义分割加权损失像素图

    我正在尝试使用多类语义分割unet https arxiv org pdf 1505 04597 pdf设计 与unet论文类似 我想为超重边框创建一个损失函数 第5页 因此 我想为每个图像制作一个自定义损失图 其中对象之间的边界权重过大
  • 减少包含超过 500 个事务的数据表页面的加载时间

    有没有办法仅通过使用数据表来减少 IE 中页面的加载时间 如果我们使用服务器端分页和排序 我们是否也可以在服务器端进行快速搜索 并且仅呈现特定选项卡而不是整个页面
  • 反序列化嵌套 JSON

    我需要一些帮助 我正在尝试反序列化 Json 文件 然后将其添加到列表中 以便我可以将其放入 C 应用程序中的表中 我生成了部分代码 但没有生成嵌套区域 我想计算属性的总数 在 json 中显示为 features 然后我想列出每个属性的
  • 使无边框窗体可移动?

    有没有办法使没有边框 FormBorderStyle 设置为 none 的窗体在鼠标在窗体上单击时可移动 就像有边框一样 This http www codeproject com KB cs csharpmovewindow aspxCo
  • XML 中的 HTML。我应该使用 CDATA 还是编码 HTML [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在使用 XML 来共享 HTML 内容 AFAIK 我可以通过以下方式嵌入 HTML 对其进行编码 我不知道使用它是否完全安全 我必须再次解
  • 为什么允许对角线移动会使 A* 和曼哈顿距离不可接受?

    我对使用 A 和曼哈顿距离度量的网格中的对角线移动有点困惑 有人可以解释为什么使用对角线移动会使其不可接受吗 进行对角线运动不会找到更好的最佳解决方案 因为比上下左右移动更少的步骤即可达到目标状态 还是我错过了一些东西 正如烧杯的评论所指出
  • 使用 jQuery 在 Firefox 中获取自动计算边距

    通过下面的标记和 CSS 我尝试获取计算出的 shell 左边距 section class page title div class shell h5 class title Welcome h5 div section shell zo
  • 为什么案例类仅扩展 Product 而不是 Product1、Product2、...、ProductN?

    当我了解到案例类扩展了 Product 后 我 想知道为什么它们不扩展 ProductN 例如 给出如下代码 case class Foo a Int 我预计Foo 1 asInstanceOf Product1 Int 工作 但它没有 用
  • Bash,检查变量

    好的 所以我正在尝试运行一个脚本 如果用户输入y or Y 那么输出是YES但如果用户输入n or N那么输出是NO 这是我到目前为止所拥有的 read character if character y character Y then e
  • 使用 XSLT 从 XML 获取值并存储在变量中

  • 实体框架中的“喜欢”查询

    如何使用 edo 实体框架在 ASP net MVC 中进行通配符文本搜索 如 SQL like 语句 我以为这会起作用 var elig from e in documentDataModel Protocol Eligibility V
  • 使用 PowerShell 同步文件夹

    我尝试这个脚本来同步 2 个文件夹 Folder1Path C test1 Folder2Path C test2 folder1Files Get ChildItem Recurse path Folder1Path folder2Fil
  • 如何阻止选项卡在 webNavigation.onBeforeNavigate 事件上打开页面?

    作为学习练习 我正在尝试构建一个示例 Chrome 扩展程序 以确保 灰名单 上的网站始终在隐身窗口中打开 这是我已经取得的进展 使用当灰色列表页面即将导航时触发的 webNavigation onBeforeNavigate 事件 我在隐
  • Cython - 实现回调

    我一直在使用 Cython 尝试与用 C 编写的库进行交互 到目前为止 一切进展顺利 我可以有效地使用库中的大部分函数 我唯一的问题在于实现回调 该库有 4 个函数定义 看起来有点像这样 typedef void Function1 con
  • 在bigquery脚本中将数组的列设置为变量值

    我试图获取数组中多列的值 并将它们设置为可在循环中用于执行其他操作的变量 谢谢 DECLARE the array ARRAY
  • 在静态变量初始化中使用 cout 时出现 C++ 分段错误

    我有一个程序 我使用 cout 来发出调试信息 该代码在静态全局变量的初始化中执行 即在程序执行的早期执行 当我使用自己的构建脚本构建程序时 它在第一次使用 cout 时出现段错误 仅将字符串文字移入 cout 因此它不能是值 我使用 va