CMemFile Detach 内存泄漏
来源:互联网 发布:java如何清空文件内容 编辑:程序博客网 时间:2024/06/12 21:43
CMemFile::Detach
BYTE* Detach( );
返回值:
返回一个指向包含内存文件内容的内存块指针。
说明:
调用该函数,以获取CMemFile使用的内存块的指针。
调用该函数也关闭了CMemFile。需要调用Attach重新为CMemFile附加内存块。如果希望重新附加该文件,并使用其数据,那么在调用Detach函数之前,应当调用CFile::GetLength以获取文件的长度。要注意的是如果已经为CMemFile附加了内存块,这样就可以使用其数据(nGrowBytes == 0),同样,也不能增大内存文件。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
转到CMemFile::Detach的源码:
BYTE* CMemFile::Detach()
{
BYTE* lpBuffer = m_lpBuffer;
m_lpBuffer = NULL;
m_nFileSize = 0;
m_nBufferSize = 0;
m_nPosition = 0;
return lpBuffer;
}
显然这里申请的内存指针直接交给用户了,CMemFile对象也基本无用了,所以要手动释放,即:
BYTE* pbBuff= (BYTE*)new char [1024];memset(pbBuff, 0, 1024);
memcpy(pbBuff, "hello", sizeof("hello"));
CMemFile mf;
mf.SeekToEnd();
mf.Write(pbBuff,1024);
delete[] pbBuff;
BYTE* lpBuffer = mf.Detach();
CString strSocket(lpBuffer);
free(lpBuffer);//CMemFile的内存使用malloc申请的
0 0
- CMemFile Detach 内存泄漏
- pthread_create()使用detach分离后仍有内存泄漏
- 一个隐蔽的内存泄漏——pthread_create后没有detach导致内存持续增长
- 解决了一个隐蔽的内存泄漏——pthread_create后没有detach导致内存持续增长
- 解决了一个隐蔽的内存泄漏——pthread_create后没有detach导致内存持续增长
- MFC内存读写CMemFile类的使用
- pthread_create创建线程后必须使用join或detach释放线程资源[内存泄漏]
- 内存泄漏。。。
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 内存泄漏
- 动态执行表不可访问,本会话的自动统计被禁止。
- Oracle查询用户权限(转)
- 第二部分:OLE数据传输(OLE Drag和Drop随笔) (转)
- 在一台服务器上安装oracle服务端和客户端,不能访问的解决办法 (转)
- 用VC++6.0制作简易浏览器(转)
- CMemFile Detach 内存泄漏
- HTML入门学习笔记--CSS动画模块(11)
- 电脑小白练级
- 已知IWebBrowser2接口,如何获得其Internet Explorer_Server窗口句柄?
- 短信猫 CMGS error
- React全家桶之React(一)
- oracle 中常用的函数(转)
- C++实现查找汉字拼音首字母
- C++汉字转拼音( 转)