草庐IT

gtest_valgrind

全部标签

c - strcpy 的 valgrind 错误

此代码应该从userInput空终止字符串中提取路径/*begincreatePath*/staticinlinechar*createPath(char*userInput){/*ThisfunctionretunsthepathfromtheuserInput*/intpathStringLength=0;char*buf=userInput;while(*(buf++)!='')pathStringLength++;char*path=malloc(pathStringLength+1);strncpy(path,userInput,pathStringLength);//mem

c - read() 失败,地址错误,valgrind 显示系统调用参数 read(buf) 指向无法寻址的字节

我有一个函数可以使用read()系统调用读取文件,并返回一个包含从文件中读取的数据的char指针。如有必要,该函数会重新分配空间。在特定点之后,读取失败并出现错误“BadAddress”。失败的最小代码如下所示:#include#include#include#include#includeconstunsignedBUFSIZE=8192;typedefstruct{char*buffer;longsize;}string_t;string_tread_file(constchar*path){string_terror={.buffer=NULL,.size=-1};intfd=o

c++ - 与 Valgrind 一起运行时,malloc 返回 null

我有一个巨大的分配(数十GB)发生在正常情况下工作的malloc调用。该系统确实有一个巨大的RAM,是一个运行2.6x86_64内核的64位机器。memrlimit已通过setrlimit设置为INFINITY。我想用Valgrind运行它来进行内存分析并检查是否有泄漏。但是当使用valgrind运行时,malloc失败并返回NULL指针。我尝试减少分配的大小,但这没有帮助。任何输入?问候,-J 最佳答案 请注意malloc(3)是在骗你——它实际上并没有一次分配所有内存,它只是向操作系统询问,而操作系统对撒谎malloc(3)。这

c - Valgrind 显示的以下内存泄漏有多严重

在编写了数千行代码后,我使用了valgrind并且看到错误的数量感到震惊。之前只是使用GDB。我的大部分错误都与字符串函数有关。我贴一部分。我知道发生错误是因为strlen不计算尾随NULL而strcpy添加它。有多严重?我真的需要修复它们吗?我可以修复它,但担心这是否会导致更多错误,因为我的代码在编写代码时没有记住这一点。即使没有为它保留空间,strcpy是否复制尾随的NULL?t.write_length=(strlen("NA\n");/*Linenumber116*/t.data=malloc(strlen("NA\n");/*117*/strcpy(t.data,"NA\n"

linux - Valgrind 和 LD_PRELOAD - 无法预加载对象

我正在尝试运行我的程序,这需要一个库位于LD_PRELOAD环境变量,带valgrind。当我这样做时,我得到以下错误:ERROR:ld.so:object'/path/to/lib/libLIBRARY.so'fromLD_PRELOADcannotbepreloaded:ignored.但是,如果我要运行程序WITHOUTvalgrind,它很乐意使用LD_PRELOADed库。为什么会这样?有办法解决吗?(P.S.系统是64位科学linux5,我相信) 最佳答案 如果valgrind是64位的,而共享库和应用程序都是32位的,

c - Valgrind, "uninitialized value(s)"错误

在我的C程序中,我使用malloc()分配内存,与calloc()相比,不初始化内存,它可能仍然包含垃圾。大多数情况下,在分配上下文中,我不会对malloc()分配的内存进行任何更改。(例如,在初始化包含缓冲区的结构的函数中,我不会更改缓冲区的内存,但稍后会更改)。Valgrind给了我很多这些错误:条件跳跃或移动取决于未初始化的值使用大小为4的未初始化值我确定在这些情况下永远不会从未初始化的内存中读取数据。我应该忽略它们还是在分配时初始化内存更好?如果我应该忽略它们,如何在Valgrind中停用此错误消息?示例1:==4253==Conditionaljumpormovedepend

linux - 在 64 位机器上运行 valgrind 32 位二进制文​​件

我试图在64位机器(linux)上运行valgrind32位二进制文​​件,但出现此错误:valgrind:failedtostarttool'memcheck'forplatform'x86-linux':Nosuchfileordirectory我需要做什么才能让它发挥作用? 最佳答案 您没有在您的Linux发行版上安装用于分析32位程序的Valgrind。例如在Ubuntu15.04上,通过以下方式安装Valgrindapt-getinstallvalgrind同时安装32位和64位版本的Valgrind分析工具:$ls-1/

c++ - Ubuntu System Monitor 和 valgrind 发现 C++ 应用程序中的内存泄漏

我正在用C++编写一个应用程序,它使用了一些外部开源库。我试图查看Ubuntu系统监视器以获取有关我的进程如何使用资源的信息,并且我注意到驻留内存继续增加到非常大的值(超过100MiB)。此应用程序应在嵌入式设备中运行,因此我必须小心。我开始认为应该有(一些)内存泄漏,所以我正在使用valgrind。不幸的是,似乎valgrind没有报告明显的内存泄漏,只有我正在使用的库中的一些小问题,仅此而已。那么,我是否必须得出结论,我的算法确实使用了那么多内存?这对我来说似乎很奇怪......或者我可能误解了系统监视器列的含义?当与软件分析相关时,有人可以阐明系统监视器中“虚拟内存”、“常驻内存

c - Valgrind:禁用条件跳转(或整个库)检查

我正在使用OpenSSLAPI开发应用程序。众所周知,OpenSSL使用大量全局变量,这些变量被Valgrind视为错误(“条件跳转或移动...”等)。因此Valgrind的输出被来自共享库的错误阻塞。这对于调试目的来说非常不方便,因为每次我得到:MorethanXtotalerrorsdetected.I'mnotreportinganymore.Finalerrorcountswillbeinaccurate.Gofixyourprogram!问题是:我可以在Valgrind中禁用派对库(在我的例子中是-lssl和-lcrypto)内存检查吗?或者我可以只关注“绝对丢失”的错误吗?

linux - 如何将 valgrind 用于内存配置文件

您能告诉我如何使用valgrind进行内存分析吗?我从谷歌找到的文章谈到了如何使用valgrind进行内存泄漏。我对如何使用它进行内存分析感兴趣(即哪些类使用了多少内存)?谢谢。 最佳答案 您可以使用valgrind的Massif获取堆配置文件的工具。这段代码仍然被标记为“实验性”,并且它并不随所有版本的valgrind一起提供。您可能需要从源代码下载和构建。另请注意,堆配置文件是按分配站点组织的,这比类的粒度更细。如果您需要按类组织的信息,您将必须阅读开发人员文档并获得机器可读格式,然后找出哪些分配站点与哪些类相关——也许需要您的