不会啊,CMapStringToPtr我用过好多遍,没出过问题。你把删除元素和释放内存的那部分贴出来看看。
解决方案 »
- 为什么下载的例子里面可以这样,我自己按照代码自己敲,却没有GetItem()函数,只有GetDlgItem()
- [请教]关于RegisterPenApp作用的疑惑
- CTreeCtrl 的InsertItem,其中有一个是有UINT nState, UINT nStateMask参数,它们应该填什么?
- 这个结构是什么意思?
- 急!有关对话框中资源的问题
- 请问ADO是什么样一个概念?
- 一个很怪的问题!快来看呀!VC bug??????
- 在Win32项目中的CToolBar错误如何解决???????
- AfxWinMain函数调用菜鸟级问题
- [MFC错误求教】
- 关于Lotus Domino,哪位大虾能简单介绍一下?
- Installshield的中文问题!
trade.OrderInfo.GetLength() + trade.TradInfo.GetLength() + 8]; //分配用来存放交易的内存
ZeroMemory(pTrade,FIXED_SIZE + trade.OrderInfo.GetLength() + trade.TradInfo.GetLength() + 8);
memcpy(pTrade,trade.AccountId,8);//映射里面存贮信息为
//帐号+交易描述
....//拷贝各个成员
m_tradecol.SetAt(temp,pTrade);//m_tradecol是一个映射
//用PrivateID作为关键字插入到映射里面,以后可以用关键字进行快速查找
//以下是退出时的代码
POSITION pos = m_tradecol.GetStartPosition();
void *buf;
CString PriID;
for(int i = 0;i < m_tradecol.GetCount();i ++)
{//采用遍历释放所有内存
m_tradecol.GetNextAssoc(pos,PriID,buf);
m_tradecol.RemoveKey(PriID);
delete [] buf; //在这行出错
}
大虾,代码我贴出来了,请帮忙分析以下
而且,你说的也解决不了问题。
{//采用遍历释放所有内存
m_tradecol.GetNextAssoc(pos,PriID,buf);
m_tradecol.RemoveKey(PriID);
delete [] buf; //在这行出错
}
这种方法是不对的,i在增加,m_tradecol.GetCount()在减小
即使不出错也无法释放全部内存,可以用以下方法
for( pos = map.GetStartPosition(); pos != NULL; )
{
map.GetNextAssoc( pos, key, buf);
map.RemoveKey(key);
delete []buf;
}
但是
m_tradecol.RemoveKey(PriID);
delete [] buf; 不应该有错我写了一小段代码测试,没有问提,可参考
CMapStringToPtr map;
char *buf=new char[100];
strcpy(buf,"1111");
map.SetAt("11",buf);
buf=new char[100];
strcpy(buf,"2222");
map.SetAt("22",buf);
buf=new char[100];
strcpy(buf,"3333");
map.SetAt("33",buf);
POSITION pos;
CString key;
void *ptr;
for( pos = map.GetStartPosition(); pos != NULL; )
{
map.GetNextAssoc( pos, key, ptr);
map.RemoveKey(key);
delete []ptr;
}