我建立一是一个基于Dlg的程序,运行时没有问题,只是在关闭程序时才会出
一个错误对话,(其中有什么重试,忽略,中止),而且程序运行过程中不点
Add 按钮,也不会出错
//////////dlg.h
protected:
CContactColletion m_Contacts;
/////////dlg.cppOnBtnADD()
{
CContact m_pContact;
m_pContact.m_strName=m_strName;
m_pContact.m_strMember=m_strEdit;
m_Contacts.SetAt(m_pContact.m_strName,&m_pContact);
}
DestroyWindow()/在关闭程序时出错
{
POSITION pos;
CString strKey;
CContact *pContact;
pos=m_Contacts.GetStartPostion();
while(pos!=NULL)
{
m_Contacts.GetNextAssoc(pos,strKey,pContent);
if(pContact)
{
m_Contacts.RemoveKey(strKey);
delete pContact;
}
}
m_Contact.RemoveAll();
ASSERT(NULL==m_Contact.GetCount());
//contact.cpp
#progma once
class CContact
{
CString m_strName;
CString m_strMember;
.
.
.
}
typedef CTypePtrMap<CMapStringMap,CString,CContact*>CContactColletion;
一个错误对话,(其中有什么重试,忽略,中止),而且程序运行过程中不点
Add 按钮,也不会出错
//////////dlg.h
protected:
CContactColletion m_Contacts;
/////////dlg.cppOnBtnADD()
{
CContact m_pContact;
m_pContact.m_strName=m_strName;
m_pContact.m_strMember=m_strEdit;
m_Contacts.SetAt(m_pContact.m_strName,&m_pContact);
}
DestroyWindow()/在关闭程序时出错
{
POSITION pos;
CString strKey;
CContact *pContact;
pos=m_Contacts.GetStartPostion();
while(pos!=NULL)
{
m_Contacts.GetNextAssoc(pos,strKey,pContent);
if(pContact)
{
m_Contacts.RemoveKey(strKey);
delete pContact;
}
}
m_Contact.RemoveAll();
ASSERT(NULL==m_Contact.GetCount());
//contact.cpp
#progma once
class CContact
{
CString m_strName;
CString m_strMember;
.
.
.
}
typedef CTypePtrMap<CMapStringMap,CString,CContact*>CContactColletion;
解决方案 »
- WSAEventSelect模型啊----?
- 安装字体?在程序里的代码。
- 还是关于文件读写的
- 为什么在CFrameWnd中动态创建CButton对象并添加click事件,点按钮时没有触发click事件,而在CView中确可以,这是为什么?
- 如何快速给数组赋0值????????
- 用ado方式连接oracle数据库,连接成功,可是怎样让他执行sql语句?
- 控制台程序如何隐藏自己?
- 急急!!!浏览器可不可以通过触发ActiveX从WebServer端取得数据
- 花时间写个简单的编译器对编程水平提高有没有帮助
- 这个简单的程序用到了重载函数,但我看不懂,尤其是string_copy()两个版本的函数体,不明白while后的条件值得是什么意思.实在是看不懂,大家帮我讲讲吧.
- 对话框对象调用DoModal()却无法显示,请问是怎么回事啊??
- 如何去除标签页上的“帮助”按钮,而不是仅仅使其变灰。
OnBtnADD()
{
CContact *m_pContact;
m_pContact->m_strName=m_strName;
m_pContact->m_strMember=m_strEdit;
m_Contacts.SetAt(m_pContact->m_strName,m_pContact);
delete m_pContact;
}
来个空的构造函数和析构函数
protected:
CContactColletion m_Contacts;
/////////dlg.cppOnBtnADD()
{
CContact *m_pContact=new CContact;
m_pContact->m_strName=m_strName;
m_pContact_>m_strMember=m_strEdit;
m_Contacts.SetAt(m_pContact->m_strName,m_pContact);
//否则m_contacts将存无效地址----------||
}
DestroyWindow()/在关闭程序时出错
{
POSITION pos;
CString strKey;
CContact *pContact=NULL;
pos=m_Contacts.GetStartPostion();
while(pos!=NULL)
{
m_Contacts.GetNextAssoc(pos,strKey,pContent);
if(pContact)
{
m_Contacts.RemoveKey(strKey);
delete pContact;
pContact=NULL
}
}
m_Contact.RemoveAll();
ASSERT(NULL==m_Contact.GetCount());
//contact.cpp
#progma once
class CContact:public CObject
{
CContact(){};
~CContact(){};CString m_strName;
CString m_strMember;
.
.
.
}
typedef CTypePtrMap<CMapStringMap,CString,CContact*>CContactColletion;
m_pContact->m_strName=m_strName;
m_pContact->m_strMember=m_strEdit;
m_Contacts.SetAt(m_pContact->m_strName,m_pContact);
delete m_pContact;m_pContact你并没有分配内存(new等),用delete删除,当然会出错。OnDestroy()中也一样。
析构的时候遍历整个MAP 将MAP的每个元素DELETE掉 就OK了