我是靠谱客的博主 健康海燕,最近开发中收集的这篇文章主要介绍CMemFile Detach 内存泄漏,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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申请的

 

最后

以上就是健康海燕为你收集整理的CMemFile Detach 内存泄漏的全部内容,希望文章能够帮你解决CMemFile Detach 内存泄漏所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部