结构体:
typedef struct tagTIMESLOTINFO
{
char *chTimeSlotName;
unsigned short usTimeSlotData;
}TIMESLOTINFO,*PTIMESLOTINFO;
构造函数里面执行:
for (int i = 0; i < 63; i ++)
{
PTIMESLOTINFO timeSlotInfo = new TIMESLOTINFO;
if ( timeSlotInfo )
{
strValue.Format("VC12_%02d",i+1);
timeSlotInfo->chTimeSlotName = new char[strValue.GetLength()+1];
strcpy(timeSlotInfo->chTimeSlotName,strValue);
timeSlotInfo->usTimeSlotData = i+1;
m_timeSlotInfoArray.Add(timeSlotInfo);
}
}
析构函数里执行:
int nCount = m_timeSlotInfoArray.GetSize();
while ( --nCount >= 0 )
{
PTIMESLOTINFO pTimeSlotInfo = m_timeSlotInfoArray.GetAt(0);
m_timeSlotInfoArray.RemoveAt(0);
if ( pTimeSlotInfo )
{
if ( pTimeSlotInfo->chTimeSlotName )
{
delete [] pTimeSlotInfo->chTimeSlotName;
pTimeSlotInfo->chTimeSlotName = NULL;
}
delete pTimeSlotInfo;
pTimeSlotInfo = NULL;
}
}
用_CrtDumpMemoryLeaks();显示红色部分有内存泄露内存泄露VC
typedef struct tagTIMESLOTINFO
{
char *chTimeSlotName;
unsigned short usTimeSlotData;
}TIMESLOTINFO,*PTIMESLOTINFO;
构造函数里面执行:
for (int i = 0; i < 63; i ++)
{
PTIMESLOTINFO timeSlotInfo = new TIMESLOTINFO;
if ( timeSlotInfo )
{
strValue.Format("VC12_%02d",i+1);
timeSlotInfo->chTimeSlotName = new char[strValue.GetLength()+1];
strcpy(timeSlotInfo->chTimeSlotName,strValue);
timeSlotInfo->usTimeSlotData = i+1;
m_timeSlotInfoArray.Add(timeSlotInfo);
}
}
析构函数里执行:
int nCount = m_timeSlotInfoArray.GetSize();
while ( --nCount >= 0 )
{
PTIMESLOTINFO pTimeSlotInfo = m_timeSlotInfoArray.GetAt(0);
m_timeSlotInfoArray.RemoveAt(0);
if ( pTimeSlotInfo )
{
if ( pTimeSlotInfo->chTimeSlotName )
{
delete [] pTimeSlotInfo->chTimeSlotName;
pTimeSlotInfo->chTimeSlotName = NULL;
}
delete pTimeSlotInfo;
pTimeSlotInfo = NULL;
}
}
用_CrtDumpMemoryLeaks();显示红色部分有内存泄露内存泄露VC
解决方案 »
- VC 6.0 中使用Windows Media Play控件生成DLL文件在其它电脑用不了
- ATL服务怎么不能outputdebugstring?
- vc2008基础问题
- ocx注册的问题~~~
- 2个不同的工程能够合在一起生成一个可执行文件吗?
- 怎么在一个程序中注入字符串,并能找到注入的字符串,来改变程序的资源
- 如何用MFC中的Tab Control控件啊??急!!
- 基于ATL的Office控件添加图片并在图片上右击弹出自己做的菜单,怎么做?
- 请问windows系统中文件关联的程序和文件图标是如何对应的?
- 我想写一个用来划价的软件,我应该怎么开始?
- 想用MFC做一个用socket 的类似http服务器一点点功能的小例子,就指导
- 中的 0x7c80bef7 处有未经处理的异常: Microsoft C++ 异常: 内存位置 0x0012f2b4 处的 _com_error。
在这里面释放。。
类单元变量开辟的内存才是在析构函数中释放的,即使是这类变量,释放内存也仅仅是释放最后一次开辟的。
所以就像一楼说的,在循环体内释放,用完就释放。
一个NEW对应一个DELETE,记住这个规律就不会有问题了。
PTIMESLOTINFO timeSlotInfo = new TIMESLOTINFO;
timeSlotInfo->chTimeSlotName = new char[strValue.GetLength()+1];
for (int i = 0; i < 63; i ++)
{
if ( timeSlotInfo )
{
strValue.Format("VC12_%02d",i+1);
strcpy(timeSlotInfo->chTimeSlotName,strValue);
timeSlotInfo->usTimeSlotData = i+1;
m_timeSlotInfoArray.Add(timeSlotInfo);
}
zeromemory(timeSlotInfo,sizeof(TIMESLOTINFO));
}
delete [] timeSlotInfo->chTimeSlotName;
timeSlotInfo->chTimeSlotName = NULL;
delete [] timeSlotInfo;
timeSlotInfo = NULL;机子没VC,没跑过,不知道有没有问题,大概意思就这样