Я не вижу причину утечки ниже.
#include <iostream>
#include <cstdlib>
int fail(const std::string str)
{
std::cerr<< str << std::endl;
exit(1);
}
const std::string usage()
{
std::string a = "a";
return a;
}
int main()
{
fail(usage());
return 0;
}
Valgrind говорит:
==7238== 14 bytes in 1 blocks are possibly lost in loss record 1 of 1
==7238== at 0x402377E: operator new(unsigned) (vg_replace_malloc.c:224)
==7238== by 0x40E7C03: std::string::_Rep::_S_create(unsigned, unsigned,
std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.10)
==7238== by 0x40E8864: (within /usr/lib/libstdc++.so.6.0.10)
==7238== by 0x40E89D5: std::string::string(char const*, std::allocator<char> const&)
(in /usr/lib/libstdc++.so.6.0.10)
==7238== by 0x80488EC: usage() (main.cpp:12)
==7238== by 0x804897C: main (main.cpp:18)
==7238== LEAK SUMMARY:
==7238== definitely lost: 0 bytes in 0 blocks.
==7238== possibly lost: 14 bytes in 1 blocks.
==7238== still reachable: 0 bytes in 0 blocks.
==7238== suppressed: 0 bytes in 0 blocks.
Проблема в функции fail ().Когда он выходит (), память просочилась.
Если я закомментирую выход (1);тогда нет никакой возможной утечки.
Кроме того, если я изменю сигнатуру с int fail (const std :: string str) на int fail (const char * str)
, то также не будет никакой возможной утечки.Мне не нравится это решение, так как я использую вещи типа fail (string + (LINE)), но независимо от того, что здесь происходит?
Я буду счастлив, если кто-нибудь сможет объяснить.
Спасибо!
(Упс. Тот же вопрос, который задавали до того, как я угадаю, извините! Valgrind сообщает об утечке памяти при присвоении значения строке )