首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

stl 内部的内存储器管理疑问

2013-02-27 
stl 内部的内存管理疑问我有一个类A,这个类实现了一些功能 ,这个类里面有成员变量 函数 和 listvector 等

stl 内部的内存管理疑问
我有一个类A,这个类实现了一些功能 ,这个类里面有成员变量 函数 和 list  vector 等容器

现在我用一个map  来管理这个类 map<int,ClassA *> stl_Map;
每次添加一个元素都要为ClassA 申请空间  ClassA *pClass = new ClassA


delete []stl_Iterator.second 然后释放其元素的的时候报错 
我又写了个测试



typedef struct     
{
DWORD dwIOType;                
}IOEVENT,*IOEVENT;
class CSADADADADA
{
public:
int a;
protected:
list<IOEVENT> stl_ListIOEvent;
private:
int b;
int c;
int d;
int e;
int f;
int g;
};
int main()
{
map<int,CSADADADADA *> stl_Map;
CSADADADADA *pst = new CSADADADADA;
pst->a = 111;
stl_Map.insert(make_pair(0,pst));
map<int,CSADADADADA *>::iterator stl_iter = stl_Map.find(0);
        //delete []stl_iter->second;      这样写就报错
        delete stl_iter->second;          //这样写就没问题,为什么? 有啥区别?
stl_iter->second = NULL;
stl_Map.erase(stl_iter);
return 1;
}




然后我也是按照这个来删除申请的内存的。但是却始终报错,看出错的地方是 这个CLASSA析构的时候调用了 list容器的析构 list析构的时候又调用 clear 函数来释放内存。我就纳闷了。明明这个容器我又没动过,也没加入或者删除任何内存,为什么他会出错?
_Nodeptr _Pnode = this->_Nextnode(this->_Myhead);    //指向这个地方,头和节点地址都是错的
我把 list 换成 vector 就没问题了 为什么?
[解决办法]
new/delete 配套,new[]/delete[] 配套,就这样。不配套的使用导致未定义行为,引发各种疑难杂症。

热点排行