Простой вопрос с C++/valgrind Я надеюсь, что с кем-то может помочь.valgrind & C++: building std :: string from character buffers
При запуске Valgrind против следующего кода, я получаю два возможных утечек, связанных с STD :: строки:
==10325== 17 bytes in 1 blocks are possibly lost in loss record 1 of 2
==10325== at 0x402569A: operator new(unsigned int) (vg_replace_malloc.c:255)
==10325== by 0x40CFD05: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==10325== by 0x40D0B10: ??? (in /usr/lib/libstdc++.so.6.0.13)
==10325== by 0x40D0CF5: std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==10325== by 0x804872B: main (test.cc:9)
==10325==
==10325== 17 bytes in 1 blocks are possibly lost in loss record 2 of 2
==10325== at 0x402569A: operator new(unsigned int) (vg_replace_malloc.c:255)
==10325== by 0x40CFD05: std::string::_Rep::_S_create(unsigned int, unsigned int, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.13)
==10325== by 0x40D0977: std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==10325== by 0x40D17AC: std::string::reserve(unsigned int) (in /usr/lib/libstdc++.so.6.0.13)
==10325== by 0x40D1C7F: std::string::append(std::string const&) (in /usr/lib/libstdc++.so.6.0.13)
==10325== by 0x40D1D63: std::string::operator+=(std::string const&) (in /usr/lib/libstdc++.so.6.0.13)
==10325== by 0x804879D: main (test.cc:11)
Хотя это не было бы слишком много работы, чтобы подавить их, и код кажется достаточно простым для меня, я хотел бы быть уверен, что я не пропущу что-то очевидное здесь, прежде чем я попытаюсь убедить valgrind, что я знаю, что я делаю.
#include <stdio.h>
#include <stdlib.h>
#include <string>
int main(int argc, char *argv[])
{
char buffer[8192];
sprintf(buffer, "ABCD");
std::string str(buffer);
std::string str2 = "";
str2 += str;
exit(EXIT_SUCCESS);
}
+1 хороший улов! – wilhelmtell
Действительно. Большое спасибо! – cubic1271