大家帮我看看,我NEW过的内存,delete了啊。为什么会有内存泄露?
char *aabb[]={"w"};
AddItem( aabb,1);//这么调用(1)
void taggeneralNod_T::AddItem( char * pStr[] ,int nLength)
{
nNumList=nLength;
if( nNumList > 0)
{
Allocate(nNumList);
}
for( int nColumn = 0; nColumn < nNumList; nColumn++ )
{
ppEnumList[ nColumn ] = new TCHAR[lstrlen( pStr[nColumn] ) + 1 ]; // 《---- 内存泄露(2)
(void)lstrcpy( ppEnumList[ nColumn ], pStr[nColumn] );
}
}
void taggeneralNod_T:: Allocate(int nNum)
{
nNumList = nNum;
ppEnumList = new LPTSTR[nNum];
for( int i = 0 ; i < nNum ; i ++ )
{
ppEnumList[i] = NULL;
}
}
void taggeneralNod_T::Release()
{
if ( ppEnumList != NULL )
{
for( int i = 0 ; i < nNumList ; i ++ )
{
if ( ppEnumList[i] != NULL )
{
delete [] ppEnumList[i];
ppEnumList[i] = NULL;
}
}
delete [] ppEnumList;
ppEnumList = NULL;
}
nNumList = 0;
}
内存泄露提示如下:(3)
Detected memory leaks!
Dumping objects -> {859} normal block at 0x013D32F8, 3 bytes long.
Data: <w > 77 00 CD
AddItem( aabb,1);//这么调用(1)
void taggeneralNod_T::AddItem( char * pStr[] ,int nLength)
{
nNumList=nLength;
if( nNumList > 0)
{
Allocate(nNumList);
}
for( int nColumn = 0; nColumn < nNumList; nColumn++ )
{
ppEnumList[ nColumn ] = new TCHAR[lstrlen( pStr[nColumn] ) + 1 ]; // 《---- 内存泄露(2)
(void)lstrcpy( ppEnumList[ nColumn ], pStr[nColumn] );
}
}
void taggeneralNod_T:: Allocate(int nNum)
{
nNumList = nNum;
ppEnumList = new LPTSTR[nNum];
for( int i = 0 ; i < nNum ; i ++ )
{
ppEnumList[i] = NULL;
}
}
void taggeneralNod_T::Release()
{
if ( ppEnumList != NULL )
{
for( int i = 0 ; i < nNumList ; i ++ )
{
if ( ppEnumList[i] != NULL )
{
delete [] ppEnumList[i];
ppEnumList[i] = NULL;
}
}
delete [] ppEnumList;
ppEnumList = NULL;
}
nNumList = 0;
}
内存泄露提示如下:(3)
Detected memory leaks!
Dumping objects -> {859} normal block at 0x013D32F8, 3 bytes long.
Data: <w > 77 00 CD
...全文
相关推荐
source_delete_new.rar_hook delete_内存泄露_重载new
解决内存泄露的源代码,重载了NEW DELETE 函数,通过获取指针的钩子,截获内存泄露的元凶
C++ 使用new与delete需注意的原则
C++的动态内存管理是通过new和delete两个操作来完成的,即用new来申请空间,用delete来释放空间。在使用new和delete时,注意以下原则。 1.new与delete需一一对应 用new操作申请空间,如果申请成功,必须在以后的某个时刻用delete释放该空间,既不能忘记释放,也不能多次释放。前者会引起内存泄露,后者会引起运行时错误。如下面的程序。 #include <iostream> using namespace std; int main() { int *p; p=new int(3); if(p) { delete p; } delete p; r
检测内存泄露的工具
对内存泄露进行检测的源码,但是先声明这不是我的原创
C++动态内存分配(new/new[]和delete/delete[])详解
主要介绍了C++动态内存分配(new/new[]和delete/delete[])详解的相关资料,需要的朋友可以参考下
new,delete和指针
new,delete和指针实例讲解


