一个低级问题,肯定得分,请进来看一看,答对者一定给分。 你在哪儿 delete(pObj); 了呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我没有delete(pObj);因为一delete就非法操作 当你不再使用那个pList时,需要将其中的所有东西都给删除掉的!这样就应该不会内存泄漏了! 老问题了。你的这个List只是STOREBASE指针的List,也就是说只记录了一个32bit的值。List不可能去释放它。解决方案:CMapWordToPtr析构前,遍历每个节点,delete它。给分吧!!!!!!!!!!!!!!!!!!! 发表个人看法:pSlowSet = new CAutoSlowSet; if(pSlowSet == NULL) return FALSE;我估计在if后面的条件恒为TRUE,直接执行 m_pSet.Open()会好一点,但怎么就调试过去了呢?STOREBASE* pObj = new STOREBASE;pObj可能也是指向数据库的指针,好象没有Open过。应该有问题。至于内存泄露,这是肯定的,你每做一个循环就new一个,而且没有好好初始化,你的机器估计内存比较大.pObj是局部变量,在while右括号处,他的生命已经结束了,你在while循环外delete一个不存在的变量,肯定出事。 CMapWordToPtr wtPtr;CString key;CObject* pObj;POSITION pos;for( pos = wtPtr.GetStartPosition(); pos != NULL; ){ wtPtr.GetNextAssoc( pos, key, (CObject*&)pObj); delete pObj;} 我在析构里写了:if(!m_plstStore->IsEmpty()) { POSITION pos = m_plstStore->GetStartPosition(); while(pos != NULL) { STOREBASE* store; WORD rKey; m_plstStore->GetNextAssoc(pos, rKey, (void*&)store); delete store; } m_plstStore->RemoveAll(); } delete m_plstStore;但还是内存泄漏,不知为何? delete无效指针是要出保护错的!!!!! 我debug了,但output还是:strcore.cpp(76) : {554} normal block at 0x007A78B0, 19 bytes long. Data: < > 01 00 00 00 06 00 00 00 06 00 00 00 CE DE C3 E8 strcore.cpp(76) : {553} normal block at 0x007A7860, 43 bytes long. Data: < c:\c> 01 00 00 00 1E 00 00 00 1E 00 00 00 63 3A 5C 63 strcore.cpp(76) : {552} normal block at 0x007A7FB0, 27 bytes long. Data: < 2001> 01 00 00 00 0E 00 00 00 0E 00 00 00 32 30 30 31 C:\WINDOWS\Desktop\AutoSlow新_2_mn\AutoSlow1Dlg.cpp(2264) : {551} normal block at 0x007A7E30, 36 bytes long. Data: < z ; ;> 01 00 00 00 BC 7F 7A 00 E0 A7 1E 3B BC 9D 1F 3B strcore.cpp(76) : {542} normal block at 0x007A7DB0, 19 bytes long. Data: < > 01 00 00 00 06 00 00 00 06 00 00 00 CE DE C3 E8 strcore.cpp(76) : {541} normal block at 0x007A79F0, 43 bytes long. Data: < c:\c> 01 00 00 00 1E 00 00 00 1E 00 00 00 63 3A 5C 63 strcore.cpp(76) : {540} normal block at 0x007A79B0, 27 bytes long. Data: < 2001> 01 00 00 00 0E 00 00 00 0E 00 00 00 32 30 30 31 C:\WINDOWS\Desktop\AutoSlow新_2_mn\AutoSlow1Dlg.cpp(2264) : {539} normal block at 0x007A7960, 36 bytes long. Data: < yz ; ;> 02 00 00 00 BC 79 7A 00 E0 A7 1E 3B F0 96 1F 3B strcore.cpp(76) : {530} normal block at 0x007A7D70, 19 bytes long. Data: < > 01 00 00 00 06 00 00 00 06 00 00 00 CE DE C3 E8 strcore.cpp(76) : {529} normal block at 0x007A7D20, 43 bytes long. Data: < c:\c> 01 00 00 00 1E 00 00 00 1E 00 00 00 63 3A 5C 63 strcore.cpp(76) : {528} normal block at 0x007A7CE0, 27 bytes long. Data: < 2001> 01 00 00 00 0E 00 00 00 0E 00 00 00 32 30 30 31 C:\WINDOWS\Desktop\AutoSlow新_2_mn\AutoSlow1Dlg.cpp(2264) : {527} normal block at 0x007A7C90, 36 bytes long. Data: < |z ; ;> 03 00 00 00 EC 7C 7A 00 E0 A7 1E 3B E0 88 1F 3B strcore.cpp(76) : {518} normal block at 0x007A7F70, 19 bytes long. Data: < > 01 00 00 00 06 00 00 00 06 00 00 00 CE DE C3 E8 strcore.cpp(76) : {517} normal block at 0x007A7F20, 43 bytes long. Data: < c:\c> 01 00 00 00 1E 00 00 00 1E 00 00 00 63 3A 5C 63 strcore.cpp(76) : {516} normal block at 0x007A7EE0, 27 bytes long. Data: < 2001> 01 00 00 00 0E 00 00 00 0E 00 00 00 32 30 30 31 C:\WINDOWS\Desktop\AutoSlow新_2_mn\AutoSlow1Dlg.cpp(2264) : {515} normal block at 0x007A7E90, 36 bytes long. Data: < ~z ; ;> 04 00 00 00 EC 7E 7A 00 D0 99 1E 3B E0 A7 1E 3B strcore.cpp(76) : {506} normal block at 0x007A7C50, 19 bytes long. Data: < > 01 00 00 00 06 00 00 00 06 00 00 00 CE DE C3 E8 strcore.cpp(76) : {505} normal block at 0x007A7C00, 43 bytes long. Data: < c:\c> 01 00 00 00 1E 00 00 00 1E 00 00 00 63 3A 5C 63 strcore.cpp(76) : {504} normal block at 0x007A7BC0, 27 bytes long. Data: < 2001> 01 00 00 00 0E 00 00 00 0E 00 00 00 32 30 30 31 C:\WINDOWS\Desktop\AutoSlow新_2_mn\AutoSlow1Dlg.cpp(2264) : {503} normal block at 0x007A7B70, 36 bytes long. Data: < {z ; ;> 05 00 00 00 CC 7B 7A 00 E0 A7 1E 3B E8 8F 1F 3B strcore.cpp(76) : {492} normal block at 0x007A7820, 19 bytes long. Data: < > 01 00 00 00 06 00 00 00 06 00 00 00 CE DE C3 E8 strcore.cpp(76) : {491} normal block at 0x007A77D0, 43 bytes long. Data: < c:\c> 01 00 00 00 1E 00 00 00 1E 00 00 00 63 3A 5C 63 strcore.cpp(76) : {490} normal block at 0x007A7790, 27 bytes long. Data: < 2001> 01 00 00 00 0E 00 00 00 0E 00 00 00 32 30 30 31 C:\WINDOWS\Desktop\AutoSlow新_2_mn\AutoSlow1Dlg.cpp(2264) : {489} normal block at 0x007A7740, 36 bytes long. Data: < wz ; ;> 06 00 00 00 9C 77 7A 00 D0 99 1E 3B E0 A7 1E 3B why????????????? 跟过这儿没有?????if(!m_plstStore->IsEmpty()) { POSITION pos = m_plstStore->GetStartPosition(); while(pos != NULL) { STOREBASE* store; WORD rKey; m_plstStore->GetNextAssoc(pos, rKey, (void*&)store); delete store; } m_plstStore->RemoveAll(); } delete m_plstStore; 尤其delete store;这一行。 pSlowSet->m_pro_index有没有重复???我个人认为:阁下编程习惯有问题。 delete一个有效指针,delete次数和new的次数一样。 delete和new是一样多的,是否我把代码没放在析构函数中,我放在OnDestory() C:\WINDOWS\Desktop\AutoSlow新_2_mn\AutoSlow1Dlg.cpp(2264) 是哪行? 与 SuperProgMan(编程者) 商量一下:我认为这样会稍好一点。 STOREBASE* pObj = new STOREBASE; pObj->Open(); while(!pSlowSet->IsEOF()) { // .................. }pObj->Close();delete pObj;如果用try,catch,throw更好 to ahphone(《风云3》里头劫镖的: 有道理 #ifndef _MYDEFINE_H_#define _MYDEFINE_H_typedef struct tagStore{ long nIndex; //索引 CString strTheme; //主题 CTime StartTime; //开始时间 CTime EndTime; //结束时间 CString strFileName; //文件路径 long nTdh; //通道号 CString tdhMs; //通道号描述 BOOL isDel; //是否删除 CString strweek; //BOOL bDs; //是否定时}STOREBASE;#endif to jxxfy(许方勇): ahphone(《风云3》里头劫镖的) 说法有道理! to jxxfy(许方勇): 对不起,我一直用STL,没用过CMapWordToPtr。 按《ahphone(《风云3》里头劫镖的)》的做应该没问题。 这句查询语言错在哪了? 想在CD-RW光盘上做一个唯一的标示,要隐藏,最好不能被复制和擦除,谁有好的办法 祝大家新年快乐,MONEY多多. 给清华紫光备个案 Socket会使内存使用增加(溢出)? 怎么设置对话框在程序运行时显示 请教,PostMessage问题! 求一个从一台计算机调用另一台计算机上COM组件的例子 create的用法? 很弱的问题,不准备给太多分,呵呵~ 是c++有前途还是java呢? 大侠门: gethostbyname 能不能访问‘本局网和诸如sina.com.cn等各个网站’以外的机器地址。能的话该如何取。
这样就应该不会内存泄漏了!
你的这个List只是STOREBASE指针的List,也就是说只记录了一个32bit的值。
List不可能去释放它。解决方案:CMapWordToPtr析构前,遍历每个节点,delete它。给分吧!!!!!!!!!!!!!!!!!!!
pSlowSet = new CAutoSlowSet;
if(pSlowSet == NULL)
return FALSE;
我估计在if后面的条件恒为TRUE,直接执行 m_pSet.Open()会好一点,但怎么就调试过去了呢?STOREBASE* pObj = new STOREBASE;
pObj可能也是指向数据库的指针,好象没有Open过。应该有问题。至于内存泄露,这是肯定的,你每做一个循环就new一个,而且没有好好初始化,你的机器估计内存比较大.pObj是局部变量,在while右括号处,他的生命已经结束了,你在while循环外delete一个不存在的变量,肯定出事。
CObject* pObj;
POSITION pos;
for( pos = wtPtr.GetStartPosition(); pos != NULL; )
{
wtPtr.GetNextAssoc( pos, key, (CObject*&)pObj);
delete pObj;
}
if(!m_plstStore->IsEmpty())
{
POSITION pos = m_plstStore->GetStartPosition();
while(pos != NULL)
{
STOREBASE* store;
WORD rKey;
m_plstStore->GetNextAssoc(pos, rKey, (void*&)store);
delete store;
}
m_plstStore->RemoveAll();
}
delete m_plstStore;
但还是内存泄漏,不知为何?
strcore.cpp(76) : {554} normal block at 0x007A78B0, 19 bytes long.
Data: < > 01 00 00 00 06 00 00 00 06 00 00 00 CE DE C3 E8
strcore.cpp(76) : {553} normal block at 0x007A7860, 43 bytes long.
Data: < c:\c> 01 00 00 00 1E 00 00 00 1E 00 00 00 63 3A 5C 63
strcore.cpp(76) : {552} normal block at 0x007A7FB0, 27 bytes long.
Data: < 2001> 01 00 00 00 0E 00 00 00 0E 00 00 00 32 30 30 31
C:\WINDOWS\Desktop\AutoSlow新_2_mn\AutoSlow1Dlg.cpp(2264) : {551} normal block at 0x007A7E30, 36 bytes long.
Data: < z ; ;> 01 00 00 00 BC 7F 7A 00 E0 A7 1E 3B BC 9D 1F 3B
strcore.cpp(76) : {542} normal block at 0x007A7DB0, 19 bytes long.
Data: < > 01 00 00 00 06 00 00 00 06 00 00 00 CE DE C3 E8
strcore.cpp(76) : {541} normal block at 0x007A79F0, 43 bytes long.
Data: < c:\c> 01 00 00 00 1E 00 00 00 1E 00 00 00 63 3A 5C 63
strcore.cpp(76) : {540} normal block at 0x007A79B0, 27 bytes long.
Data: < 2001> 01 00 00 00 0E 00 00 00 0E 00 00 00 32 30 30 31
C:\WINDOWS\Desktop\AutoSlow新_2_mn\AutoSlow1Dlg.cpp(2264) : {539} normal block at 0x007A7960, 36 bytes long.
Data: < yz ; ;> 02 00 00 00 BC 79 7A 00 E0 A7 1E 3B F0 96 1F 3B
strcore.cpp(76) : {530} normal block at 0x007A7D70, 19 bytes long.
Data: < > 01 00 00 00 06 00 00 00 06 00 00 00 CE DE C3 E8
strcore.cpp(76) : {529} normal block at 0x007A7D20, 43 bytes long.
Data: < c:\c> 01 00 00 00 1E 00 00 00 1E 00 00 00 63 3A 5C 63
strcore.cpp(76) : {528} normal block at 0x007A7CE0, 27 bytes long.
Data: < 2001> 01 00 00 00 0E 00 00 00 0E 00 00 00 32 30 30 31
C:\WINDOWS\Desktop\AutoSlow新_2_mn\AutoSlow1Dlg.cpp(2264) : {527} normal block at 0x007A7C90, 36 bytes long.
Data: < |z ; ;> 03 00 00 00 EC 7C 7A 00 E0 A7 1E 3B E0 88 1F 3B
strcore.cpp(76) : {518} normal block at 0x007A7F70, 19 bytes long.
Data: < > 01 00 00 00 06 00 00 00 06 00 00 00 CE DE C3 E8
strcore.cpp(76) : {517} normal block at 0x007A7F20, 43 bytes long.
Data: < c:\c> 01 00 00 00 1E 00 00 00 1E 00 00 00 63 3A 5C 63
strcore.cpp(76) : {516} normal block at 0x007A7EE0, 27 bytes long.
Data: < 2001> 01 00 00 00 0E 00 00 00 0E 00 00 00 32 30 30 31
C:\WINDOWS\Desktop\AutoSlow新_2_mn\AutoSlow1Dlg.cpp(2264) : {515} normal block at 0x007A7E90, 36 bytes long.
Data: < ~z ; ;> 04 00 00 00 EC 7E 7A 00 D0 99 1E 3B E0 A7 1E 3B
strcore.cpp(76) : {506} normal block at 0x007A7C50, 19 bytes long.
Data: < > 01 00 00 00 06 00 00 00 06 00 00 00 CE DE C3 E8
strcore.cpp(76) : {505} normal block at 0x007A7C00, 43 bytes long.
Data: < c:\c> 01 00 00 00 1E 00 00 00 1E 00 00 00 63 3A 5C 63
strcore.cpp(76) : {504} normal block at 0x007A7BC0, 27 bytes long.
Data: < 2001> 01 00 00 00 0E 00 00 00 0E 00 00 00 32 30 30 31
C:\WINDOWS\Desktop\AutoSlow新_2_mn\AutoSlow1Dlg.cpp(2264) : {503} normal block at 0x007A7B70, 36 bytes long.
Data: < {z ; ;> 05 00 00 00 CC 7B 7A 00 E0 A7 1E 3B E8 8F 1F 3B
strcore.cpp(76) : {492} normal block at 0x007A7820, 19 bytes long.
Data: < > 01 00 00 00 06 00 00 00 06 00 00 00 CE DE C3 E8
strcore.cpp(76) : {491} normal block at 0x007A77D0, 43 bytes long.
Data: < c:\c> 01 00 00 00 1E 00 00 00 1E 00 00 00 63 3A 5C 63
strcore.cpp(76) : {490} normal block at 0x007A7790, 27 bytes long.
Data: < 2001> 01 00 00 00 0E 00 00 00 0E 00 00 00 32 30 30 31
C:\WINDOWS\Desktop\AutoSlow新_2_mn\AutoSlow1Dlg.cpp(2264) : {489} normal block at 0x007A7740, 36 bytes long.
Data: < wz ; ;> 06 00 00 00 9C 77 7A 00 D0 99 1E 3B E0 A7 1E 3B why?????????????
if(!m_plstStore->IsEmpty())
{
POSITION pos = m_plstStore->GetStartPosition();
while(pos != NULL)
{
STOREBASE* store;
WORD rKey;
m_plstStore->GetNextAssoc(pos, rKey, (void*&)store);
delete store;
}
m_plstStore->RemoveAll();
}
delete m_plstStore;
我个人认为:阁下编程习惯有问题。
delete次数和new的次数一样。
我认为这样会稍好一点。
STOREBASE* pObj = new STOREBASE;
pObj->Open();
while(!pSlowSet->IsEOF())
{
// ..................
}
pObj->Close();
delete pObj;如果用try,catch,throw更好
有道理
#define _MYDEFINE_H_typedef struct tagStore{
long nIndex; //索引
CString strTheme; //主题
CTime StartTime; //开始时间
CTime EndTime; //结束时间
CString strFileName; //文件路径
long nTdh; //通道号
CString tdhMs; //通道号描述
BOOL isDel; //是否删除
CString strweek;
//BOOL bDs; //是否定时
}STOREBASE;#endif
ahphone(《风云3》里头劫镖的) 说法有道理!
对不起,我一直用STL,没用过CMapWordToPtr。
按《ahphone(《风云3》里头劫镖的)》的做应该没问题。