|
发表于 2019-2-2 10:41:55
|
显示全部楼层
struct SBufInfo{
SBufInfo()
{
p = NULL;
nBufLen = 0;
}
WORD *p;
int nBufLen;
};
class CMyNewDelete
{
public:
CMyNewDelete()
{
m_arr.RemoveAll();
}
~CMyNewDelete()
{
int nCount = m_arr.GetCount();
for (int i = 0;i<nCount;i++)
{
ASSERT(NULL != m_arr.GetAt(i).p);
delete[]m_arr.GetAt(i).p;
}
}
BOOL MyNew(WORD**p,const int nLen)
{
ASSERT(NULL == *p);
*p = new WORD[nLen];
ASSERT(NULL != *p);
if (NULL == *p)
{
TRACE("数据内存申请失败\n");
return FALSE;
}
memset(*p,0,sizeof(WORD)*nLen);
SBufInfo tem;
tem.p = *p;
tem.nBufLen = nLen;
m_arr.Add(tem);
return TRUE;
}
void Clean(WORD*p)
{
int nCount = m_arr.GetCount();
for (int i = 0;i<nCount;i++)
{
if (p == m_arr.GetAt(i).p)
{
memset(p,0,sizeof(WORD)*m_arr.GetAt(i).nBufLen);
return ;
}
}
}
private:
CArray<SBufInfo,SBufInfo&>m_arr;
};
使用的时候 就是
WORD *wbuf33 = NULL;
CMyNewDelete myAutoBuf;
myAutoBuf.MyNew(&wbuf33,nLen);
以前自己瞎写的。我也就这里遇到过需要双重指针的情况:需要在某个函数中申请内存。
楼主你完全可以单步调试,看看 每个变量运行后指向的内容 和内存位置 就知道了 |
评分
-
查看全部评分
|