Я сталкиваюсь с ситуацией, когда у моего приложения есть утечки памяти.После запуска valgrind выглядит так, будто я получаю утечку памяти, связанную с std :: string:
==20274== 34 bytes in 1 blocks are definitely lost in loss record 34 of 140
==20274== at 0x4C29DB5: operator new(unsigned long) (vg_replace_malloc.c:332)
==20274== by 0x7F843C8: std::string::_Rep::_S_create(unsigned long, unsigned long, std::allocator<char> const&) (in /usr/lib64/libstdc++.so.6.0.13)
==20274== by 0x7F84DE4: ??? (in /usr/lib64/libstdc++.so.6.0.13)
==20274== by 0x7F84F32: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib64/libstdc++.so.6.0.13)
==20274== by 0xA50CC71: __static_initialization_and_destruction_0(int, int) (filename.cpp:22)
==20274== by 0xA50D03F: _GLOBAL__sub_I_filename.cpp (filename.cpp:112)
==20274== by 0x400E9CE: _dl_init (in /lib64/ld-2.12.so)
==20274== by 0x4000B69: ??? (in /lib64/ld-2.12.so)
Код, о котором идет речь:
в filename.h:
extern std::string aString;
в filename.cpp:
std::string aString = "a string";
Также стоит отметить, что это находится в отдельном пространстве имен, т.е.
namespace aNamespace {
//...
std::string aString; // in extern in .h
//...
}
Каждое место в коде, это (изконечно) упоминается как:
aNamespace::aString;
И, насколько я могу судить, он никогда не сбрасывается и используется либо как постоянная ссылка, либо для инициализации другой строки.
Может тамкогда-нибудь возникала ситуация, когда std :: string вызывал бы утечки памяти?
edit:
Связанная часть вывода valgrind:
==20274== by 0x400EFBB: _dl_fini (in /lib64/ld-2.12.so)
==20274== by 0x88DAA01: exit (in /lib64/libc-2.12.so)
==20274== by 0x88C3D26: (below main) (in /lib64/libc-2.12.so)
Это делает выходвызов?Это стандартный выход (0)?