我可以让 valgrind 告诉我哪个值未初始化吗?

2024-02-25

I ran valgrind一些代码如下:

valgrind --tool=memcheck --leak-check=full --track-origins=yes ./test

它返回以下错误:

==24860== Conditional jump or move depends on uninitialised value(s)
==24860==    at 0x4081AF: GG::fl(M const&, M const&) const (po.cpp:71)
==24860==    by 0x405CDB: MO::fle(M const&, M const&) const (m.cpp:708)
==24860==    by 0x404310: M::operator>=(M const&) const (m.cpp:384)
==24860==    by 0x404336: M::operator<(M const&) const (m.cpp:386)
==24860==    by 0x4021FD: main (test.cpp:62)
==24860==  Uninitialised value was created by a heap allocation
==24860==    at 0x4C2EBAB: malloc (vg_replace_malloc.c:299)
==24860==    by 0x40653F: GODA<unsigned int>::allocate_new_block() (goda.hpp:82)
==24860==    by 0x406182: GODA<unsigned int>::GODA(unsigned long, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (goda.hpp:103)
==24860==    by 0x402A0E: M::init(unsigned long) (m.cpp:63)
==24860==    by 0x403831: M::M(std::initializer_list<unsigned int>, MO const*) (m.cpp:248)
==24860==    by 0x401B56: main (test.cpp:31)

所以第71行有错误。太好了。以下是到第 71 行的行:po.cpp(第 71 行是最后一行):

DEG_TYPE dtk = t.ord_deg();
DEG_TYPE duk = u.ord_deg();
bool searching = dtk == duk;
NVAR_TYPE n = t.nv();
NVAR_TYPE k = 0;
for (/* */; searching and k < n; ++k) { // this is line 71

OK, so which第71行的值未初始化?

  • 当然不是k;
  • 我手动检查了(=“单步执行gdb") that t的构造函数初始化返回的值t.nv(),所以当然不是n(实际上n设置为 6,正确的值);
  • searching是由dtk and duk,但我也手动检查过t's and u的构造函数初始化返回的值.ord_deg()(实际上两者dtk and duk设置为 3,正确的值)。

我在这里完全不知所措。有什么选项可以告诉我们valgrind报告哪个精确值它认为未初始化?

Update

回答一个问题,这里是第 61 行test.cpp:

M s { 1, 0, 5, 2, 0 };

因此它使用初始化列表来构造。这是构造函数:

M::M(
    initializer_list<EXP_TYPE> p, const MO * ord
) {
  common_init(ord);
  init_e(p.size());
  NVAR_TYPE i = 0;
  last = 0;
  for (
       auto pi = p.begin();
       pi != p.end();
       ++pi
  ) {
    if (*pi != 0) {
      e[last] = i;
      e[last + 1] = *pi;
      last += 2;
    }
    ++i;
  }
  ord->set_data(*this);
}

这是类中的数据,添加了显示其初始化位置的注释:

NVAR_TYPE n;    // init_e()
EXP_TYPE * e;   // common_init()
NVAR_TYPE last; // common_init()
DEG_TYPE od;    // common_init(), revised in ord->set_data()
const MO * o;   // common_init()
MOD * o_data;   // common_init(), revised in ord->set_data()

是否有一些选项可以告诉 valgrind 报告哪个精确值 它认为值未初始化?

你能做的最好的就是使用--track-origins=yes(您已经使用此选项)。 Valgrind 只会告诉您未初始化值的大致位置(Valgrind 的起源),但不会告诉您确切的变量名称。看Valgrind手册 http://valgrind.org/docs/manual/mc-manual.html#mc-manual.options for --track-origins:

当设置为 yes 时,Memcheck 会跟踪所有数据的起源 未初始化的值。然后,当出现未初始化值错误时 据报道,Memcheck 将尝试显示该值的来源。一个起源 可以是以下四个地方之一:堆块、堆栈 分配、客户端请求或其他各种来源(例如, 致电brk)。

对于源自堆块的未初始化值,Memcheck 显示 块被分配的位置。对于未初始化的值 从堆栈分配中,Memcheck 可以告诉您哪个函数 分配了值,但仅此而已——通常它会向您显示 函数左大括号的源位置。那么你 应仔细检查函数的所有局部变量是否 已正确初始化。

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

我可以让 valgrind 告诉我哪个值未初始化吗? 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • 嵌入式编程中的zalloc是什么?

    我正在研究对 ESP8266 串行 WiFi 芯片进行编程 在其 SDK 示例中 它广泛使用了一个名为os zalloc我期望的地方malloc 不过偶尔 os malloc也被使用 因此它们在功能上似乎并不相同 不幸的是没有文档 任何人都
  • 应用 UIView 变换后查找帧坐标 (CGAffineTransform)

    我旋转我的视图CGAffineTransform view setTransform newTransform 应用变换后 帧值保持不变 但如何找到该帧的 旋转 或变换值 source informit com http www infor
  • 需要一个例程来检测相似但不相同的字符串

    我有一个字符串列表 其中一些自我之前的版本以来已被修改 有些更改是微不足道的 间距 相差一个单词等 我想检测只有 微小 差异的字符串 以便如果可能的话我可以尝试使用旧的翻译 细微差别 是什么意思 在我开始使用数据库之前我不会知道 您是否知道
  • 如何从 scrapy 蜘蛛回调中收集统计信息?

    如何从蜘蛛回调中收集统计数据 Example class MySpider Spider name myspider start urls http example com def parse self response stats set
  • C++11:重要的线程局部静态变量?

    我有一个X类 class X 我想做这个 void f thread local static X x 实际上我使用的是 gcc 所以关键字是 thread 但我不能 因为你只能有微不足道的 thread locals 对此最好的解决方法是
  • 将 lmer 输出到 word/excel

    我正在工作R 有一个名为lme4 执行模型 lmer rasch lt lmer Response item 1 1 STIDSTD family binomial data exampledata 让我在控制台中输出 如帖子末尾所示 我想
  • 确定无冲突集?

    假设您有一堆集合 而每个集合都有几个子集 Set1 香蕉 菠萝 橙子 苹果 羽衣甘蓝 黄瓜 洋葱 大蒜 Set2 香蕉 黄瓜 大蒜 鳄梨 番茄 设置N 现在的目标是从每个集合中选择一个子集 而每个子集必须与任何其他选定的子集不发生冲突 对于
  • Coffeescript、Backbone 和加载顺序

    考虑这个 Coffeescript 类 在一个应用程序中 每个类都位于自己的文件中 class Manager extends Person title titles manager 如果该文件在 title 对象之前加载 则会生成错误 我
  • JavaScript 对象作为函数参数

    使用 JavaScript 假设我有一个函数 X 并且在该函数中创建了一个名为 objectX 的对象 函数 X 返回对象 X 稍后在代码中 函数 Z somevar anObject 接收 objectX 作为其参数之一 现在在函数 Z
  • 索引键列 VS 索引包含列

    谁能解释一下这两个 索引Key列 VS 索引Included Column 目前 我的索引有 4 个索引键列和 0 个包含列 我想知道两者之间的区别 索引键列是索引 B 树的一部分 包含的列不是 取两个索引 CREATE INDEX ind
  • Codesandbox.io 中的 React-Testing-Library 问题

    我对 React 来说是一个相对菜鸟 想在这个沙盒中练习一些 tdd基本反应沙箱 https codesandbox io s 93yp98knx4 测试代码似乎正在影响应用程序组件状态 如果您在浏览器和测试之间切换 您将看到测试项目被添加
  • SQL Select 包括数据类型和数据值

    如何从表中选择数据并将数据类型包含在值中 例如 我有一个名为 EMPLOYEE 的表 其中包含 fname lastname phone 等 如果我做 SELECT FROM EMPLOYEE 我得到了所有的列 如果我做 SELECT CO
  • 如何定位 UIView?

    我花了几个小时尝试定位 UIView 最终发现我需要修改视图框架 所以我向 UIViewController 子类添加了一个 setPosition 方法 如下所示 void setPosition CGPoint position CGR
  • 将 YYYYMMDD 字符串日期转换为日期时间值[重复]

    这个问题在这里已经有答案了 可能的重复 在 C 中将字符串转换为日期时间 https stackoverflow com questions 1592653 convert string to datetime in c sharp 一个问
  • UIViewController PresentViewController 在 ios 8 上崩溃

    刚刚在我们的错误记录系统中收到此错误 一直在高低搜索 似乎找不到任何解决方案 任何帮助表示赞赏 这里是堆栈跟踪 https gist github com hermanccw 2a9264fd77d46e0e7279 可能在您的 XCODE
  • RESTful 破坏 Rails 中的多态关联?

    如何销毁关联本身并保留关联的对象 同时保持 RESTful 具体来说 我有这些模型 class Event lt ActiveRecord Base has many model surveys as gt surveyable depen
  • 对于表单中的每个控件,如何对表单中的所有文本框执行某些操作?

    如何使用 Foreach 语句对我的文本框执行某些操作 foreach Control X in this Controls Check if the controls is a TextBox if it is delete it s T
  • 命名空间 system.windows 中不存在“Forms”

    我刚刚开始研究 c 并且正在摆弄从某个论坛获得的一些代码示例 此代码使用命名空间using system windows forms我收到错误 命名空间 system windows 中不存在 Forms 我还收到一些与未定义函数相关的错误
  • 如何使用 Azure 移动服务 API 功能

    An APIWAMS 中添加了功能 我可以在其中定义自定义脚本 这似乎反对以前创建脚本表的做法 但是 我找不到任何有关如何使用它的描述 哪些客户端可以使用此功能 可以在 iOS 或 Javascript 中使用吗 还有关于这个主题的更多帖子
  • 我可以让 valgrind 告诉我哪个值未初始化吗?

    I ran valgrind一些代码如下 valgrind tool memcheck leak check full track origins yes test 它返回以下错误 24860 Conditional jump or mov