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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值