I use this code to set my locale:
locale::global(locale("pt_BR.UTF-8"));
Am I doing it right? When I run the code using Valgrind , it displays a memory leak. How can I handle this? Should I reset the old language?
376 bytes in 1 blocks are still reachable in loss record 65 of 73 ==7536== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==7536== by 0x5380664: duplocale (duplocale.c:53) ==7536== by 0x4EA436F: std::ctype<wchar_t>::ctype(__locale_struct*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA86B3: std::locale::_Impl::_Impl(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA8BDA: std::locale::locale(char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x40D68D: Relatorio::geraRelatorios() (Relatorio.cpp:23) ==7536== by 0x402335: main (main.cpp:24) ==7536== ==7536== 376 bytes in 1 blocks are still reachable in loss record 66 of 73 ==7536== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==7536== by 0x5380664: duplocale (duplocale.c:53) ==7536== by 0x4EA16DF: std::codecvt<wchar_t, char, __mbstate_t>::codecvt(__locale_struct*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA86E1: std::locale::_Impl::_Impl(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA8BDA: std::locale::locale(char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x40D68D: Relatorio::geraRelatorios() (Relatorio.cpp:23) ==7536== by 0x402335: main (main.cpp:24) ==7536== ==7536== 376 bytes in 1 blocks are still reachable in loss record 67 of 73 ==7536== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==7536== by 0x5380664: duplocale (duplocale.c:53) ==7536== by 0x4EA87D6: std::locale::_Impl::_Impl(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA8BDA: std::locale::locale(char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x40D68D: Relatorio::geraRelatorios() (Relatorio.cpp:23) ==7536== by 0x402335: main (main.cpp:24) ==7536== ==7536== 376 bytes in 1 blocks are still reachable in loss record 68 of 73 ==7536== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==7536== by 0x5380664: duplocale (duplocale.c:53) ==7536== by 0x4EB1E8D: std::__timepunct<wchar_t>::_M_initialize_timepunct(__locale_struct*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4ED6A27: std::__timepunct<wchar_t>::__timepunct(__locale_struct*, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA890C: std::locale::_Impl::_Impl(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA8BDA: std::locale::locale(char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x40D68D: Relatorio::geraRelatorios() (Relatorio.cpp:23) ==7536== by 0x402335: main (main.cpp:24) ==7536== ==7536== 376 bytes in 1 blocks are still reachable in loss record 69 of 73 ==7536== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==7536== by 0x5380664: duplocale (duplocale.c:53) ==7536== by 0x4ED71E0: std::messages<wchar_t>::messages(__locale_struct*, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA899F: std::locale::_Impl::_Impl(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA8BDA: std::locale::locale(char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x40D68D: Relatorio::geraRelatorios() (Relatorio.cpp:23) ==7536== by 0x402335: main (main.cpp:24) ==7536== ==7536== 400 bytes in 1 blocks are still reachable in loss record 70 of 73 ==7536== at 0x4C2B0E0: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==7536== by 0x4EB1C29: std::__timepunct<char>::_M_initialize_timepunct(__locale_struct*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EBBC47: std::__timepunct<char>::__timepunct(__locale_struct*, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA85F2: std::locale::_Impl::_Impl(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA8BDA: std::locale::locale(char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x40D68D: Relatorio::geraRelatorios() (Relatorio.cpp:23) ==7536== by 0x402335: main (main.cpp:24) ==7536== ==7536== 400 bytes in 1 blocks are still reachable in loss record 71 of 73 ==7536== at 0x4C2B0E0: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==7536== by 0x4EB25A9: std::__timepunct<wchar_t>::_M_initialize_timepunct(__locale_struct*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4ED6A27: std::__timepunct<wchar_t>::__timepunct(__locale_struct*, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA890C: std::locale::_Impl::_Impl(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA8BDA: std::locale::locale(char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x40D68D: Relatorio::geraRelatorios() (Relatorio.cpp:23) ==7536== by 0x402335: main (main.cpp:24) ==7536== ==7536== 576 bytes in 1 blocks are still reachable in loss record 72 of 73 ==7536== at 0x4C2B0E0: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==7536== by 0x4EA8384: std::locale::_Impl::_Impl(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA8BDA: std::locale::locale(char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x40D68D: Relatorio::geraRelatorios() (Relatorio.cpp:23) ==7536== by 0x402335: main (main.cpp:24) ==7536== ==7536== 1,344 bytes in 1 blocks are still reachable in loss record 73 of 73 ==7536== at 0x4C2B0E0: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==7536== by 0x4EA86A1: std::locale::_Impl::_Impl(char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x4EA8BDA: std::locale::locale(char const*) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19) ==7536== by 0x40D68D: Relatorio::geraRelatorios() (Relatorio.cpp:23) ==7536== by 0x402335: main (main.cpp:24)
I just call the locale once and it gives me a hundred memory leaks.
Thanks.
source share