有没有办法让勇敢的人去报告“绝对失败”的发生呢?
我想要的不是“分配到哪里”,而是“那个可怜的内存被泄露的地方”。
例如,当f()返回时,这段代码出现了“绝对丢失”的漏洞:
#include <stdlib.h>
void f () {
void *ptr = malloc(42);
}
int main () {
f();
return 0;
}
但瓦兰公司只报告了分配的来源:
==9772== HEAP SUMMARY:
==9772== in use at exit: 42 bytes in 1 blocks
==9772== tota
我是C和内存管理的新手,我试着用lexer->src_size查找内存泄漏,我在strlen()中发现了所有的问题--我不知道为什么当我使用strlen()时内存泄漏。
缬草:
==49058== Memcheck, a memory error detector
==49058== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==49058== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
==49058==
我在两个Solaris/Linux平台上都有一个内核,我看不出这个问题。在linux平台上,我有以下核心:
(gdb) where
#0 0x001aa81b in do_lookup_x () from /lib/ld-linux.so.2
#1 0x001ab0da in _dl_lookup_symbol_x () from /lib/ld-linux.so.2
#2 0x001afa05 in _dl_fixup () from /lib/ld-linux.so.2
#3 0x001b5c90 in _dl_runtime_resolve () from /lib/ld-lin
当我在64位的ubuntu64位上运行我用C++编写的Valgrind-3.11.0程序时,我得到了许多‘无效读取的大小N’。
错误消息如下所示,其中N在1、4、8之间变化。
Invalid read of size N.
Address 0xblahblah is 88 bytes inside a block of size 176 alloc'd
大小为176的块是一个分配了新运算符的C++类对象,N的大小足够小,因此不会越界。那么为什么Valgrind没有告诉我“没有堆叠”、“没有错位”、“最近释放”之类的原因呢?
有人知道为什么Valgrind在没有像“没有堆叠”、“没有错误
我正在使用"--time-stamp=yes"在一个大型代码库上运行val差龙。
我需要找出分配的每个内存的实际(相对)时间戳
问题:浮研报告包含生成泄漏摘要的时间戳。
Steps:
- Run the codebase for 24 Hours with valgrind [ options
"--tool=memcheck --leak-check=full --time-stamp=yes"]
- Terminate the process with "kill -15" after 24 hours, Leak Summa
我正在使用NVIDIA硬件在Ubuntu 12.04上测试我的代码。
不会发生实际的OpenCL处理;但是我的初始化代码仍在运行。这段代码调用clGetPlatformIDs。然而,Valgrind报告了一个内存泄漏:
==2718== 8 bytes in 1 blocks are definitely lost in loss record 4 of 74
==2718== at 0x4C2B6CD: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==2718== by 0x509ECB6: ??
本块中提到的所有函数都是库函数。我如何纠正这个内存泄漏?
它列在“仍然可达的”类别下。(还有4个,非常相似,但大小不同)
630 bytes in 1 blocks are still reachable in loss record 5 of 5
at 0x4004F1B: calloc (vg_replace_malloc.c:418)
by 0x931CD2: _dl_new_object (dl-object.c:52)
by 0x92DD36: _dl_map_object_from_fd (dl-load.c:972)
by 0x92EFB6: _
我在一个程序上运行valgrind,虽然程序执行得很好,valgrind报告如下:
==6542== Invalid read of size 4
==6542== at 0x8049C6F: Table::removeWebsite(Table&) (Table.cpp:146)
==6542== by 0x8049768: main (app.cpp:140)
==6542== Address 0x43f87d4 is 4 bytes inside a block of size 8 free'd
==6542== at 0x402B528: opera
我有一个我写的程序,它的内存占用会随着时间的推移而增长。它最终会消耗所有可用的系统内存,然后使系统崩溃。
我正在尝试确定似乎是内存泄漏的来源。我已经在代码上运行了Valgrind。它没有明确或间接地报告内存丢失。它确实列出了可能丢失的内存,但没有太多的清晰度。我可以使用一些关于如何追踪这个问题的建议。
==13049== HEAP SUMMARY:
==13049== in use at exit: 2,240,095 bytes in 3,720 blocks
==13049== total heap usage: 50,296 allocs, 46,576 frees, 768
我正在用两种稍微不同的方式创建一个c++对象,在下面的代码中,当CASE是0时,有一个内存泄漏,但在else情况下没有内存泄漏。
#include <string>
#define CASE 1
class A {
private:
std::string *s;
public:
A(std::string *p_s) { s = p_s; }
};
int main() {
#if CASE==0
auto a = A(new std::string("Hello"));
#else
auto s = std::string("Hell
我已经为一个嵌入式设备编译了val差制,并执行了下面的命令来检查泄漏。
./valgrind --leak-check=full --xml=yes --xml-file=<xml file path> <application>
但是它给出了以下错误。
valgrind: Fatal error at startup: a function redirection
valgrind: which is mandatory for this platform-tool combination
valgrind: cannot be set up. Details
,这是,,而不是,一个副本。请见下文.
使用选项--track-origins=yes --leak-check=full --leak-resolution=high运行val研可以很好地报告哪些内存块确实丢失了,分配了哪些函数,分配时的堆栈跟踪等等。
我找不到造成问题的块的地址。例如:如果我关闭了一个free,那么val差术就会给出以下输出:
==94998== 56 (24 direct, 32 indirect) bytes in 1 blocks are definitely lost in loss record 46 of 109
==94998== at 0x1000A5