C++ 设置全局区域设置时内存泄漏

C++ 设置全局区域设置时内存泄漏,c++,memory-leaks,locale,valgrind,C++,Memory Leaks,Locale,Valgrind,我正在使用以下代码设置我的区域设置: locale::global(locale("pt_BR.UTF-8")); 我这样做对吗?当我使用Valgrind运行代码时,它显示内存泄漏。我该如何处理这些问题? 我应该重置旧的区域设置吗 376 bytes in 1 blocks are still reachable in loss record 65 of 73 ==7536== at 0x4C2AB80: malloc (in /usr/lib/valgrind/vgpreload_me

我正在使用以下代码设置我的区域设置:

locale::global(locale("pt_BR.UTF-8"));
我这样做对吗?当我使用
Valgrind
运行代码时,它显示内存泄漏。我该如何处理这些问题? 我应该重置旧的区域设置吗

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)
1个块中的376字节仍然可以在73个块中的丢失记录65中访问
==7536==at 0x4C2AB80:malloc(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中)
==7536==by 0x5380664:duplocale(duplocale.c:53)
==7536==by 0x4EA436F:std::ctype::ctype(uu locale_struct*,无符号长)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==by 0x4EA86B3:std::locale::_Impl::_Impl(字符常量*,无符号长)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==0x4EA8BDA:std::locale::locale(char const*)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==by 0x40D68D:Relatorio::gerarrelatorios()(Relatorio.cpp:23)
==7536==0x402335:main(main.cpp:24)
==7536== 
==7536==1个块中的376字节仍然可以在丢失记录66(共73个)中访问
==7536==at 0x4C2AB80:malloc(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中)
==7536==by 0x5380664:duplocale(duplocale.c:53)
==7536==by 0x4EA16DF:std::codecvt::codecvt(uu locale_struct*,无符号长)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==by 0x4EA86E1:std::locale::_Impl::_Impl(字符常量*,无符号长)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==0x4EA8BDA:std::locale::locale(char const*)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==by 0x40D68D:Relatorio::gerarrelatorios()(Relatorio.cpp:23)
==7536==0x402335:main(main.cpp:24)
==7536== 
==7536==1个块中的376个字节仍然可以在丢失记录67(共73个)中访问
==7536==at 0x4C2AB80:malloc(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中)
==7536==by 0x5380664:duplocale(duplocale.c:53)
==7536==by 0x4EA87D6:std::locale::_Impl::_Impl(字符常量*,无符号长)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==0x4EA8BDA:std::locale::locale(char const*)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==by 0x40D68D:Relatorio::gerarrelatorios()(Relatorio.cpp:23)
==7536==0x402335:main(main.cpp:24)
==7536== 
==7536==1个块中的376个字节仍然可以在丢失记录68(共73个)中访问
==7536==at 0x4C2AB80:malloc(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中)
==7536==by 0x5380664:duplocale(duplocale.c:53)
==7536==by 0x4EB1E8D:std::__timepoint::_M_initialize_timepoint(__locale_struct*)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==by 0x4ED6A27:std::uu timepunt::u timepunt(uu 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(字符常量*,无符号长)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==0x4EA8BDA:std::locale::locale(char const*)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==by 0x40D68D:Relatorio::gerarrelatorios()(Relatorio.cpp:23)
==7536==0x402335:main(main.cpp:24)
==7536== 
==7536==1个块中的376个字节仍然可以在73个块中的丢失记录69中访问
==7536==at 0x4C2AB80:malloc(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中)
==7536==by 0x5380664:duplocale(duplocale.c:53)
==7536==by 0x4ED71E0:std::messages::messages(uu locale_struct*,char const*,无符号长)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==by 0x4EA899F:std::locale::_Impl::_Impl(字符常量*,无符号长)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==0x4EA8BDA:std::locale::locale(char const*)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==by 0x40D68D:Relatorio::gerarrelatorios()(Relatorio.cpp:23)
==7536==0x402335:main(main.cpp:24)
==7536== 
==7536==1个块中的400字节仍然可以在73个块中的丢失记录70中访问
==7536==在0x4C2B0E0处:新运算符(无符号长)(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中)
==7536==by 0x4EB1C29:std::_timepoint::_M_initialize_timepoint(__locale_struct*)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==by 0x4EBBC47:std::u timepunt::u timepunt(u 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(字符常量*,无符号长)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==0x4EA8BDA:std::locale::locale(char const*)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==by 0x40D68D:Relatorio::gerarrelatorios()(Relatorio.cpp:23)
==7536==0x402335:main(main.cpp:24)
==7536== 
==7536==1个块中的400字节仍然可以在丢失记录71(共73个)中访问
==7536==在0x4C2B0E0处:新运算符(无符号长)(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中)
==7536==by 0x4EB25A9:std::u timepunt::_M_initialize_timepunt(u locale_struct*)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==by 0x4ED6A27:std::uu timepunt::u timepunt(uu 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(字符常量*,无符号长)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==0x4EA8BDA:std::locale::locale(char const*)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==by 0x40D68D:Relatorio::gerarrelatorios()(Relatorio.cpp:23)
==7536==0x402335:main(main.cpp:24)
==7536== 
==7536==576字节(1个块中)在丢失记录72(共73个)中仍然可以访问
==7536==在0x4C2B0E0处:新运算符(无符号长)(在/usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so中)
==7536==by 0x4EA8384:std::locale::_Impl::_Impl(字符常量*,无符号长)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==0x4EA8BDA:std::locale::locale(char const*)(in/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19)
==7536==
struct scoped_locale_global {
   scoped_locale_global(const std::locale& loc)
   : m_prev_loc(std::locale::global(loc))
   {
   }

   ~scoped_locale_global() 
   {
       std::locale::global(m_prev_loc);
   }

   std::locale m_prev_loc;
};