那如果是
char *use=......();
wchar_t *pUnicode = ......();
delete[]use;
use = NULL;
delete[]pUnicode;
pUnicode = NULL;
//这种情况是不是use和pUnicode都需要释放, 我这样写应该没错吧?
那如果是
char *use=......();
wchar_t *pUnicode = char_To_wchar_t(use);
delete[]use;
use = NULL;
delete[]pUnicode;
pUnicode = NULL;
//这种情况use被转成wchar_t *类型了, 是否也是需要释放这两个指针, 这样释放也是没错的吗
还有一种情况, 就是
wchar_t * char_To_wchar_t(char *pStr)
{
wchar_t *abc=......(pStr);
return abc;
//这种情况需要返回一个宽字符, 那abc这个指针要在哪里delete[] ????
}
7 个解决方案
#1
delete
[] use;// use 不是数组!
#2
无new [],无delete[]
#3
呃, 这个写错了,不能加[], 那第三个问题呢, 函数内返回的话需要delete 吗, 如果要的话要在哪里执行delete
#4
谢谢赵老师, 不过如果是函数内部new了, 要返回的话需要delete吗
wchar_t * const_char_To_wchar_t(const char *pStr)
{
int nUnicodeLen = ::MultiByteToWideChar(CP_ACP,0,pStr,-1,0);
wchar_t *pUnicode = new wchar_t[nUnicodeLen + 1]; //这里有new
memset(pUnicode, 0, (nUnicodeLen + 1)*sizeof(wchar_t));
::MultiByteToWideChar(CP_ACP,0,pStr,-1,(LPWSTR)pUnicode,nUnicodeLen);
return pUnicode;
}
#5
无new [],无delete[];
跟是否在函数中无关。
跟是否在函数中无关。
#6
delete [] 和delete本质的区别是,前者会调用n释构函数,为每的new出来的对象释构,后者只调用一次
char* p=new char[100];
delete p; //不需要delete[] p;因为没有释构的需要
aClass* p=new aClass[100];
delete[] p;//必须delete[] ,如果没有[],p指向的内存同样会被释放,但是,释构函数只被调用一次,而不是100次
char* p=new char[100];
delete p; //不需要delete[] p;因为没有释构的需要
aClass* p=new aClass[100];
delete[] p;//必须delete[] ,如果没有[],p指向的内存同样会被释放,但是,释构函数只被调用一次,而不是100次
#7
多跟2楼的学学
#1
delete
[] use;// use 不是数组!
#2
无new [],无delete[]
#3
呃, 这个写错了,不能加[], 那第三个问题呢, 函数内返回的话需要delete 吗, 如果要的话要在哪里执行delete
#4
谢谢赵老师, 不过如果是函数内部new了, 要返回的话需要delete吗
wchar_t * const_char_To_wchar_t(const char *pStr)
{
int nUnicodeLen = ::MultiByteToWideChar(CP_ACP,0,pStr,-1,0);
wchar_t *pUnicode = new wchar_t[nUnicodeLen + 1]; //这里有new
memset(pUnicode, 0, (nUnicodeLen + 1)*sizeof(wchar_t));
::MultiByteToWideChar(CP_ACP,0,pStr,-1,(LPWSTR)pUnicode,nUnicodeLen);
return pUnicode;
}
#5
无new [],无delete[];
跟是否在函数中无关。
跟是否在函数中无关。
#6
delete [] 和delete本质的区别是,前者会调用n释构函数,为每的new出来的对象释构,后者只调用一次
char* p=new char[100];
delete p; //不需要delete[] p;因为没有释构的需要
aClass* p=new aClass[100];
delete[] p;//必须delete[] ,如果没有[],p指向的内存同样会被释放,但是,释构函数只被调用一次,而不是100次
char* p=new char[100];
delete p; //不需要delete[] p;因为没有释构的需要
aClass* p=new aClass[100];
delete[] p;//必须delete[] ,如果没有[],p指向的内存同样会被释放,但是,释构函数只被调用一次,而不是100次
#7
多跟2楼的学学