有关内存泄漏

来源:百度知道 编辑:UC知道 时间:2024/05/18 01:52:51
char * ConvertToChar(const CString &s)
{
int nSize = s.GetLength();
char * pAnsiString = new char[nSize+1];
memset(pAnsiString,0,nSize+1);
wcstombs(pAnsiString,s,nSize+1);
return pAnsiString;
}

void CMFCApplicationTestDlg::OnBnClickedOk() //调用多少次时才有必要加delete[] a;
{
CString string = _T("abc");
char * a = ConvertToChar(string);
delete[] a;
}

每次都需要调用。
1.内存泄漏是程序在运行过程中在堆中分配的内存没有及时删除。最坏的结果会导致系统内存耗尽。程序退出后内存被系统回收。
2.如果只是需要功能上将cstring转换成char* 可以使用CString的方法getbuffer。
3.你这种使用方法不好。在一个函数里面new的东西在另外地方删除不妥,如果你这个函数是封装在另外一个DLL里面,调用的程序静态链接此DLL的话,执行delete[]a将会导致运行错误。

每次调用都需要delete[] a;
你可以直接用身体string来封装 就不管释放分配的问题了