首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >尝试理解valgrind输出

尝试理解valgrind输出
EN

Stack Overflow用户
提问于 2012-12-25 14:58:49
回答 2查看 635关注 0票数 4

下面是valgrind的输出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Conditional jump or move depends on uninitialised value(s)
in RingsWidget::UpdateSeekBar() in ringswidget.cpp:514
1: RingsWidget::UpdateSeekBar() in <a href="file:///media/dipesh/Documents/Qt-projects/NomadDesktop-build-Desktop-Debug/../NomadDesktop/ringswidget.cpp:514" >ringswidget.cpp:514</a>
2: RingsWidget::UpdateRings() in <a href="file:///media/dipesh/Documents/Qt-projects/NomadDesktop-build-Desktop-Debug/../NomadDesktop/ringswidget.cpp:138" >ringswidget.cpp:138</a>
3: RingsWidget::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) in <a href="file:///media/dipesh/Documents/Qt-projects/NomadDesktop-build-Desktop-Debug/moc_ringswidget.cpp:49" >/media/dipesh/Documents/Qt-projects/NomadDesktop-build-Desktop-Debug/moc_ringswidget.cpp:49</a>
4: QMetaObject::activate(QObject*, QMetaObject const*, int, void**) in /usr/lib/libQtCore.so.4.8.4
5: QObject::event(QEvent*) in /usr/lib/libQtCore.so.4.8.4
6: QApplicationPrivate::notify_helper(QObject*, QEvent*) in /usr/lib/libQtGui.so.4.8.4
7: QApplication::notify(QObject*, QEvent*) in /usr/lib/libQtGui.so.4.8.4
8: QCoreApplication::notifyInternal(QObject*, QEvent*) in /usr/lib/libQtCore.so.4.8.4
9: /usr/lib/libQtCore.so.4.8.4
10: /usr/lib/libQtCore.so.4.8.4
11: g_main_context_dispatch in /usr/lib/libglib-2.0.so.0.3400.3
12: /usr/lib/libglib-2.0.so.0.3400.3
13: g_main_context_iteration in /usr/lib/libglib-2.0.so.0.3400.3
14: QEventDispatcherGlib::processEvents(QFlags&lt;QEventLoop::ProcessEventsFlag&gt;) in /usr/lib/libQtCore.so.4.8.4
15: /usr/lib/libQtGui.so.4.8.4
16: QEventLoop::processEvents(QFlags&lt;QEventLoop::ProcessEventsFlag&gt;) in /usr/lib/libQtCore.so.4.8.4
17: QEventLoop::exec(QFlags&lt;QEventLoop::ProcessEventsFlag&gt;) in /usr/lib/libQtCore.so.4.8.4
18: QCoreApplication::exec() in /usr/lib/libQtCore.so.4.8.4
19: main in <a href="file:///media/dipesh/Documents/Qt-projects/NomadDesktop-build-Desktop-Debug/../NomadDesktop/main.cpp:19" >main.cpp:19</a>

Uninitialised value was created by a heap allocation  1: operator new(unsigned long) in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
2: MusicWidget::MusicWidget(QWidget*) in <a href="file:///media/dipesh/Documents/Qt-projects/NomadDesktop-build-Desktop-Debug/../NomadDesktop/musicwidget.cpp:148" >musicwidget.cpp:148</a>
3: NomadWindow::Initialize() in <a href="file:///media/dipesh/Documents/Qt-projects/NomadDesktop-build-Desktop-Debug/../NomadDesktop/nomadwindow.cpp:127" >nomadwindow.cpp:127</a>
4: NomadWindow::NomadWindow(QWidget*) in <a href="file:///media/dipesh/Documents/Qt-projects/NomadDesktop-build-Desktop-Debug/../NomadDesktop/nomadwindow.cpp:27" >nomadwindow.cpp:27</a>
5: main in <a href="file:///media/dipesh/Documents/Qt-projects/NomadDesktop-build-Desktop-Debug/../NomadDesktop/main.cpp:15" >main.cpp:15</a>

这是代码..

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
511 NomadWindow *par = (NomadWindow*)parent();
512 float percentage = par->GetMusicWidget()->GetMPDSeekPerc();
513 settings[5].operator []("value") = percentage;
514 if ( percentage < 0.2 )
515     settings[5].operator []("fg_alpha") = 0.2;
516 else
517     settings[5].operator []("fg_alpha") = percentage;

valgrind输出来自行514 if (百分比< 0.2 )

我到底做错了什么?提前谢谢..

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-25 15:13:19

看起来好像valgrind传播了在GetMPDSeekPerc()中访问的未初始化值的使用,并在未初始化值实际用于某些用途时报告错误,而不仅仅是传递它。关于Uninitialised value was created by a heap allocation ...的消息非常直截了当地指出了未初始化值的来源。

票数 2
EN

Stack Overflow用户

发布于 2012-12-25 15:12:39

条件跳转或移动取决于未初始化的值

这意味着通常您有一个if,它测试一个未初始化的值。因此,if的结果是随机的。

要继续下去,您需要知道这个变量是在哪里分配/声明的。您可以从以下位置获取此信息:

未初始化值是由堆分配1创建的:运算符new(unsigned long)在...MusicWidget::MusicWidget(QWidget*) in ...musicwidget.cpp:148

这意味着在musicwidget.cpp的148行中,你对一个整数(百分比)做了一个新的操作,但是你没有初始化它。你应该会在那里发现你的错误。

离题:在int上使用new通常不是一个好主意。如果可能的话,最好将其声明为变量

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14031697

复制
相关文章
Valgrind 使用入门
王纯
2017/10/25
7.9K1
Valgrind 使用入门
valgrind使用介绍
-O0 、-O1 、-O2 、-O3 编译器的优化选项的 4 个级别,-O0 表示没有优化, -O1 为默认值,-O3 优化级别最高。
yzh
2020/08/04
3.2K0
内存检测工具Valgrind
Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合。Valgrind由内核(core)以及基于内核的其他调试工具组成。内核类似于一个框架(framework),它模拟了
张善友
2018/01/22
2.5K0
内存检测工具Valgrind
valgrind使用:检测非法读写内存
14 Nov 2016 valgrind使用:检测非法读写内存 本文简单介绍如何通过valgrind检测c语言中的非法读写内存,避免发生不可预测行为。 1 什么非法读写内存 1.1 非法写内存 非法写内存是指往不属于程序分配的内存中写入数据。比如malloc一段内存,大小只有5个字节,那么你只能往这5个字节空间写入数据(如果是拷贝字符串,只能写4个字节),在这5字节的内存空间之外写入数据,都是非法的。比如写数组时越界,拷贝字符串时忘记结尾结束符。 1.2 非
俊采
2018/05/15
3.1K0
基于AIGC写作尝试:深入理解 Dremio
现代组织不断从各个来源产生和收集大量数据。数据可能存储在不同的格式、位置,并且在容量、速度和种类上可能存在差异,使用户难以快速提取其中的价值。数据孤岛在许多公司都是存在,为了解决数据孤岛问题,企业可以采取的措施有:数据集成、建立数据共享机制、数据标准化、数据虚拟化等。其中数据虚拟化通常需要一个引擎支持读取多源的数据,且统一访问逻辑;业界解决改场景的引擎有Spark、Presto、Dremio等,本文接下来主要描述Dremio。
jhonye
2023/04/17
3.4K0
valgrind使用:检测内存泄漏
07 Nov 2016 valgrind使用:检测内存泄漏 本文简单介绍c开发中的内存泄漏和动态内存分配函数,并使用valgrind分析c程序的内存泄漏问题。 1 什么是内存泄漏 c语言中,需由开发者负责内存的申请和释放,内存泄漏是指开发者在程序中使用动态内存分配函数xxlloc在堆(heap)上申请内存,内存在使用完毕后未使用free函数释放,那么这块内存在程序退出前都不能再次使用,导致内存使用逐渐增大,直至耗尽,程序异常退出。 xxlloc函数指mal
俊采
2018/05/15
2.5K0
linux安装valgrind
转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)
帘卷西风
2018/08/03
2.3K0
内存检测王者之剑—valgrind
记得在大学的刚开始学习C/C++的时候,对于内存问题一点也没有关心过,其实也是关心比较少,知道后来才慢慢注意起来,当时排查是否有内存泄漏全靠手,去看看malloc和free或者new和delete是否对应起来,这也是一种比较简单的查询是否有内存泄漏的办法,后来老师提供了一种用程序来检测是否有内存泄漏,其实就是重载new和delete的方法。
233333
2021/08/05
1.8K0
valgrind测试报告分析
valgrind输出结果会报告5种内存泄露,"definitely lost", "indirectly lost", "possibly lost", "still reachable", and "suppressed"。这五种内存泄露分析如下:
yzh
2020/08/17
3.2K0
Linux 命令(143)—— valgrind 命令
Valgrind 工具套件提供了许多调试和分析工具,可帮助您使程序更快、更正确。 这些工具中最受欢迎的称为 Memcheck。 它可以检测 C 和 C++ 程序中常见的许多与内存相关的错误,这些错误可能导致崩溃和不可预知的行为。
恋喵大鲤鱼
2022/10/07
3.4K0
基于AIGC写作尝试:深入理解 Apache Arrow
在当前的数据驱动时代,大量的数据需要在不同系统和应用程序之间进行交换和共享。这些数据可能来自于不同的源头,如传感器、数据库、文件等,具有不同的格式、大小和结构;不同系统和编程语言的运行环境也可能存在差异,如操作系统、硬件架构等,进一步增加了数据交换的复杂度和难度。为了将这些数据有效地传输和处理,需要一个高性能的数据交换格式,以提高数据交换和处理的速度和效率。传统上,数据交换通常采用文本格式,如CSV、XML、JSON等,但它们存在解析效率低、存储空间占用大、数据类型限制等问题,对于大规模数据的传输和处理往往效果不佳。因此,需要一种高效的数据交换格式,可以快速地将数据从一个系统或应用程序传输到另一个系统或应用程序,并能够支持不同编程语言和操作系统之间的交互。
jhonye
2023/04/15
6.9K1
基于AIGC写作尝试:深入理解 Apache Hudi
本文的目的是为读者提供全面了解Apache Hudi的知识。具体而言,读者可以了解到Apache Hudi是什么、它的架构如何工作、常见的使用案例以及与之配合工作的最佳实践。此外,读者还将获得有关如何设置和配置Apache Hudi,以及优化其性能的技巧的见解。通过阅读本文,读者应该对Apache Hudi有扎实的理解,并了解如何在其数据处理流程中利用它的优势。
jhonye
2023/04/18
1.8K0
valgrind的安装及简单使用
官网下载:http://valgrind.org/downloads/current.html#current
yifei_
2022/11/14
5500
【Linux】内存检测工具Valgrind
内存检测工具Valgrind Valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,作者是获得过Google-O’Reilly开源大奖的Julian Seward,它包含一个内核——一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务——调试,分析,测试等。 内存检测,使用它的Memcheck工具。 ---- Valgrind安装 官网 http://valgrind.org ubuntu sudo apt-get install valgrind ----
半生瓜的blog
2023/05/13
3.1K0
【Linux】内存检测工具Valgrind
Linux gdb+valgrind调试
产生了 core 文件,我们该如何使用该 Core 文件进行调试呢?Linux 中可以使用 GDB 来调试 core 文件,步骤如下:
CV_Learner
2020/08/04
3.4K0
valgrind 安装与简单测试
Valgrind工具套件提供了许多调试和分析工具,可帮助您使程序更快,更正确。这些工具中最受欢迎的称为Memcheck。它可以检测许多与内存相关的错误,这些错误在 C 和 C++ 程序中很常见,并可能导致崩溃和不可预测的行为。
DBA札记
2023/02/15
6110
valgrind 安装与简单测试
你真的理解LDO的输出电容吗!?
LDO的输出要加一个电容,大部分人解释是为瞬间负载电流提供能量,减小输出纹波。
工程师看海
2022/06/23
5.2K0
你真的理解LDO的输出电容吗!?
Linux下检测内存泄露的工具 valgrind
参考:http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html 几乎是照抄参考过来的,只不过后面自己调试一下代码。 这里主要介绍Valgrind的一些简单用法。更多详细的使用方法可以访问valgrind的主页:http://www.valgrind.org Valgrind是Julian Seward的作品。Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它包含一个内核,一个软件合成的CPU,和一系列的小工具。 每
xcywt
2018/03/28
6.1K0
Linux下检测内存泄露的工具 valgrind
Linux C++ 使用valgrind 检查内存泄漏
内存泄漏检测 主要看definitely lost:这里如果是0,说明没有会导致程序崩溃读的内存泄漏问题。
多凡
2020/06/15
3.3K0
Linux C++ 使用valgrind 检查内存泄漏
点击加载更多

相似问题

理解valgrind的输出

20

Valgrind -无法理解错误输出

21

在valgrind输出理解方面需要帮助

40

尝试理解strace输出

11

理解并尝试使用Valgrind进行C程序设计。

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文