Code of my program is
#include <iostream>
int main(int argc, const char *argv[])
{
std::cout << "hello world!\n";
return 0;
}
I compiled it with flags
-Wpedantic -pedantic-errors -std=c++11 -g -Wall -Wextra
Run Valgrind on it and saw something strange, this simple program has memory leak, output of valgrind --leak-check=full --show-leak-kinds=all command is
==4492== 72,704 bytes in 1 blocks are still reachable in loss record 1 of 1
==4492== at 0x4C28C20: malloc (vg_replace_malloc.c:296)
==4492== by 0x4EBF11F: ??? (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.21)
==4492== by 0x400E9F9: call_init.part.0 (dl-init.c:78)
==4492== by 0x400EAE2: call_init (dl-init.c:36)
==4492== by 0x400EAE2: _dl_init (dl-init.c:126)
==4492== by 0x40011C9: ??? (in /lib/x86_64-linux-gnu/ld-2.19.so)
my question is - how to find out what is going on?
Valgrind Memcheck is a tool that detects memory leaks and memory errors. Some of the most difficult C bugs come from mismanagement of memory: allocating the wrong size, using an uninitialized pointer, accessing memory after it was freed, overrunning a buffer, and so on.
This is memory reserved forever by linux system dynamic library loader. Ways to find out what's going on include reading code for _dl_init() function, e.g.: here. Another option is to step-through your program with debugger, you'll want to break _init before run and probably also use disassemble and si, as glibc can't be built unoptimized.
See discussion here (and probably mark as dup)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With