首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >icu::日历::createInstance()泄漏内存

icu::日历::createInstance()泄漏内存
EN

Stack Overflow用户
提问于 2014-04-02 04:51:31
回答 1查看 741关注 0票数 2

下面是一个泄漏的测试程序(在Ubuntu10.04,ICU 4.2上):

代码语言:javascript
复制
#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说:

代码语言:javascript
复制
==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的版本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-04 22:09:01

你需要打电话给u_cleanup()来清理重症监护病房。通常这并不重要,所以不是自动完成的。如果您使用--enable-auto-cleanup构建ICU,它将尝试在库卸载时在某些平台上进行清理。见用户指南

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22801843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档