首页
社区
课程
招聘
[求助]new char[]的内存释放问题
发表于: 2013-7-25 22:18 10059

[求助]new char[]的内存释放问题

2013-7-25 22:18
10059
//Unicode的字符转换函数
char* UnicodeToAnsi(wchar_t* wszString) 

    //预转换,得到所需空间的大小
    int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL); 
    //分配空间要给'\0'留个空间 
    char* szAnsi = new char[ansiLen + 1]; 
    //转换 
    //unicode版对应的strlen是wcslen 
    ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL); 
    //最后加上'\0' 
    szAnsi[ansiLen] = '\0'; 
  return szAnsi;
}

void test()
{
    CString wpName = UnicodeToAnsi((wchar_t*)wupinName);
}
比如上面的test()函数调用UnicodeToAnsi函数,可是此函数中的char* szAnsi = new char[ansiLen + 1]语句申请了内存,那我每次调用UnicodeToAnsi函数会不会产生内存没释放的问题?该如何处理呢?不知道大家是如何处理字符转换问题的,求教了。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 228
活跃值: (115)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
delete szAnsi[];szAnsi=NULL;
2013-7-25 22:23
0
雪    币: 238
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
new 后,用完记得 delete szAnsi ;
2013-7-25 22:24
0
雪    币: 3330
活跃值: (1667)
能力值: ( LV6,RANK:93 )
在线值:
发帖
回帖
粉丝
4
的确没释放,既然都用CString,直接传个CString的引用或指针进去,假设参数为CString& str,在szAnsi[ansiLen] = '\0';后
str = szAnsi;
delete[] szAnsi;
return; //返回值自己定义
完整如下,仅供参考:
void UnicodeToAnsi(wchar_t* wszString, CString& str)
{
    //预转换,得到所需空间的大小
    int ansiLen = ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), NULL, 0, NULL, NULL);
    //分配空间要给'\0'留个空间
    char* szAnsi = new char[ansiLen + 1];
    //转换
    //unicode版对应的strlen是wcslen
    ::WideCharToMultiByte(CP_ACP, NULL, wszString, wcslen(wszString), szAnsi, ansiLen, NULL, NULL);
    //最后加上'\0'
    szAnsi[ansiLen] = '\0';
    str = szAnsi;
    delete [] szAnsi;
}
2013-7-25 22:27
0
游客
登录 | 注册 方可回帖
返回
//