我看到valgrind将内存泄漏分为:绝对迷路了间接丢失可能丢失了仍然可以联系到压制我刚刚修复了一个漏洞,其中“可能丢失”是主要问题。documentationsays:"possiblylost意味着你的程序正在泄漏内存,除非你用指针做一些不寻常的事情,这些指针可能会导致它们指向已分配block的中间;请参阅用户手册了解一些可能的原因"我可以知道一个“用指针做不寻常的事情,可能导致它们指向已分配block的中间”的例子吗?我的意思是一个例子,尽管它是由valgrind报告的,但可以忽略“可能丢失”。一个使用指针使valgrind提示但同时以这种方式使用指针在某种程度上是合法的示例谢谢
在过去的几周里,我一直在努力寻找一个导致我的应用程序崩溃的非常困难的错误。首先,应用程序在分配std::string时崩溃,然后在释放局部变量期间崩溃。仔细检查代码后,没有理由在这些位置崩溃;但是,它总是在尝试释放无效指针(即指向无效内存的指针)时崩溃。我不知道为什么这个指针没有指向正确的位置。我怀疑这个问题与某种内存损坏问题或指针损坏问题有关。问题是我无法在视觉上追踪到它……但是。我不知道从哪里开始查看代码,而且有数千行代码要查看,所以这似乎不是解决问题的现实方法。Valgrind应运而生......我多次依赖该工具来查找代码中可能导致此类崩溃的问题。然而,这一次却空手而归!当问题发
整个测试代码包含在main.cpp中如下:#includeusingstd::cout;usingstd::endl;voidf(inti){int*pi=newint;*pi=i;std::cout我编译时没有优化-O0(来自EclipseQt项目):g++-c-pipe-O0-Wall-W-D_REENTRANT-DQT_NO_DEBUG-DQT_GUI_LIB-DQT_CORE_LIB-DQT_SHARED-I/usr/share/qt4/mkspecs/linux-g++-I.-I/usr/include/qt4/QtCore-I/usr/include/qt4/QtGui-I
所以我想看看当通过Valgrind运行时,从简单的Makefile编译的基本Qt4应用程序会发生什么。什么会导致这些泄漏?我正在删除我这边的任何动态分配的对象。另外,退出程序时,我只单击右上角的关闭(X)。GUI库是否只是“free()”它们malloc()的任何内存?由qmake命令缩减的Makefile是:#######Compiler,toolsandoptionsCXX=g++CXXFLAGS=-pipe-O2-Wall-WLIBS_INCLUDE=${HOME}INCPATH=-I$(LIBS_INCLUDE)/QtSDK/Desktop/Qt/473/gcc/mkspecs
我在这里找到的大多数问题都提供一段代码,并由指出实际错误的人回答。我的问题是关于一般未初始化值的条件跳转。我可以理解,如果确定此分配仅完成一次并且在程序的生命周期内可能需要,则不必在程序结束时清理一block内存。据我所知,当程序终止时,GType系统会留下大量未释放的内存。这些未释放的block可以被视为“误报”。但是“有条件的跳跃或移动未初始化的值”会是误报吗?我唯一能想出的是有人通过读取随机地址来实现(坏的)随机函数(其中随机地址本身是棘手的部分;)。另一个例子可能是硬件映射到内存的一部分然后被读取,但这主要是由驱动程序而不是由普通用户应用程序完成的。是否有任何其他示例(最好是C
我有一个测试驱动程序链接到我编写的库。该库使用autotools,因此它会生成存档(.a文件)和动态库(.so)。当我将我的驱动程序与“g++-static”链接时,大概是链接到.a,valgrind点亮并反复提示“条件跳转或移动取决于未初始化的值”。第一次失败发生在__pthread_initialize_minimal中的main之前。当我在没有-static的情况下进行链接时,大概是在使用.so进行链接时,我没有收到任何valgrind投诉。有人知道为什么吗?valgrind是否不能与-static一起使用?更新:我什至无法发布我的驱动程序的精简版本,因为它链接到一个我无法精简的
有没有办法在运行时识别正在从valgrind中运行的可执行文件?我有一组C++单元测试,其中一个期望std::vector::reserve抛出std::bad_alloc。当我在valgrind下运行它时,它完全退出,阻止我测试内存泄漏(使用valgrind)和行为(期望抛出异常)。这是一个重现它的最小示例:#includeintmain(){size_tuint_max=static_cast(-1);std::vectorv;v.reserve(uint_max);}运行valgrind,我得到这个输出:Warning:sillyarg(-1)to__builtin_new()n
我对valgrind中的“额外”内存泄漏有疑问。例如,我创建了一个名为temp.cpp的测试程序:intmain(){return0;}在终端中,我运行:>>g++-otemp.outtemp.cpp>>valgrind--tool=memcheck--leak-check=full--show-leak-kinds=all./temp.out这会导致多次内存泄漏。怎么会这样?==4438==LEAKSUMMARY:==4438==definitelylost:4,120bytesin2blocks==4438==indirectlylost:2,288bytesin6blocks==
Valgrind是一个出色的内存调试器,它有选项--trace-malloc=yes,它产生如下内容:--16301--malloc(8)=0x4EAD748--16301--free(0x4EAD748)--16301--free(0x4EAD498)--16301--malloc(21)=0x4EAD780--16301--malloc(8)=0x4EAD838--16301--free(0x4EAD6F8)--16301--calloc(1,88)=0x4EAD870--16301--realloc(0x0,160)malloc(160)=0x4EB1CF8--16301--re
Valgrind在为字符串赋值时报告内存泄漏。我使用以下简单代码来测试Valgrind报告的内存泄漏。/*******************************************FILE:t3.c*Compiledusing:g++-gt3.c-ot3**$g++-v*Readingspecsfrom/usr/lib/gcc/i686-pc-linux-gnu/3.4.6/specs*Configuredwith:./configure--prefix=/usr--infodir=/share/info--mandir=/share/man*--enable-languag