读书人

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

发布时间: 2013-02-27 10:48:11 作者: rapoo

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[] 配套,就这样。不配套的使用导致未定义行为,引发各种疑难杂症。

读书人网 >C++

热点推荐