icu::Calendar::createInstance() 泄漏内存
icu::Calendar::createInstance() leaks memory
这是一个泄漏的测试程序(在Ubuntu 10.04,ICU 4.2上):
#include <unicode/uversion.h>
#include <unicode/calendar.h>
int main()
{
TimeZone* tz = TimeZone::createTimeZone("Asia/Pyongyang");
UErrorCode status = U_ZERO_ERROR;
Calendar* cal = Calendar::createInstance(tz, status); // adopts tz
delete cal;
}
valgrind --leak-check=full
说:
==22978== 304 bytes in 1 blocks are possibly lost in loss record 20 of 22
==22978== at 0x4C28F86: malloc (vg_replace_malloc.c:291)
==22978== by 0x526B34D: icu_4_2::UnicodeString::allocate(int) (in /usr/lib/libicuuc.so.42.1)
==22978== by 0x526B993: icu_4_2::UnicodeString::cloneArrayIfNeeded(int, int, signed char, int**, signed char) (in /usr/lib/libicuuc.so.42.1)
==22978== by 0x526D97A: icu_4_2::UnicodeString::doReplace(int, int, unsigned short const*, int, int) (in /usr/lib/libicuuc.so.42.1)
==22978== by 0x4EF0E90: icu_4_2::TimeZone::initDefault() (in /usr/lib/libicui18n.so.42.1)
==22978== by 0x4EF10A4: icu_4_2::TimeZone::createDefault() (in /usr/lib/libicui18n.so.42.1)
==22978== by 0x4EEE750: icu_4_2::GregorianCalendar::GregorianCalendar(icu_4_2::Locale const&, UErrorCode&) (in /usr/lib/libicui18n.so.42.1)
==22978== by 0x4EEB493: ??? (in /usr/lib/libicui18n.so.42.1)
==22978== by 0x4EEBA01: icu_4_2::Calendar::createInstance(icu_4_2::TimeZone*, icu_4_2::Locale const&, UErrorCode&) (in /usr/lib/libicui18n.so.42.1)
==22978== by 0x400A42: icu_4_2::Calendar::createInstance(icu_4_2::TimeZone*, UErrorCode&) (in /home/jzwinck/test/a.out)
==22978== by 0x4009C5: main
我的问题是,我是否错误地使用了 ICU,或者是否可以应用一些解决方法来释放 ICU 似乎正在创建的默认时区对象? 我无法轻松更改正在使用的操作系统和 ICU 版本。
您需要
调用u_cleanup()
来清理ICU。通常没关系,所以不会自动完成。如果使用--enable-auto-cleanup
构建 ICU,它将在某些平台上尝试在库卸载时进行清理。请参阅用户指南。
相关文章:
- C++功能泄漏内存,我是C++新手,不确定如何解决
- 我的堆栈弹出式磁带的实现是否泄漏内存?
- 将 c++ 向量转换为字符 ** 而不会泄漏内存
- 析构函数 C++ 使泄漏内存
- 构造函数对象赋值是否泄漏内存
- corba :: orb_init泄漏内存
- Gmock泄漏内存
- 如何在不泄漏内存的情况下删除链接列表
- Visual C ODBC关闭记录集泄漏内存
- 为什么泄漏内存比在动态数组上执行 delete[] 慢
- OpenGL正在泄漏内存.哪个对象未释放
- 可以std ::退出泄漏内存
- uiautomation findall泄漏内存
- 为什么在此OpenCL代码中泄漏内存,为什么要泄漏内存
- pthread在完成后会泄漏内存
- win32 标准::线程泄漏内存
- 返回指向同一变量的指针是否会泄漏内存
- 使用clectType(new any_type())可能会泄漏内存泄漏
- Windows开发:如何确定我的应用程序是否正在泄漏内存
- WinHttp打开泄漏内存