如何解决重复释放
typedef struct
{
.....;
}DevType;
typedef struct Dev
{
......;
DevType *pDevTye;
Dev
:pDevType(NULL)
{
}
~Dev
{
if(pDevType == NULL)
{
delete pDevType;
pDevType = NULL;
}
}
}
list<device*> mylist;
while(...)
{
DevType *pDevType = new DevType;
...;
while(...)
{
device *d = new device;
...;
d->pDevType = pDevType;
mylist.push_back(d);
}
}
list<device*>::iterator it;
for (it = mylist.begin(); it != mylist.end(); ++it)
{
...;
}
for (it = mylist.begin(); it != mylist.end(); ++it)
{
if(*it ! == NULL)
{
delete *it;
*it = NULL;
}
}
//问题是pDevType是一个指针指向一块内存,链表有开辟几块内存,每次释放链表的时候都会有一个delete pDevType,所以每次都会有一个~Dev,导致内存重复释放。
新人求大神指导...
内存重复释放,C++
[解决办法]
试试智能指针:(你可以忘了释放问题)
typedef std::unique_ptr<device> device_ptr;
typedef std::shared_ptr<DevType> DevTypePtr;
list<device_ptr> mylist;
while(...)
{
DevTypePtr devtype(new DevType);
...;
while(...)
{
device_ptr d(new device);
...;
d->pDevType = pDevType; // 此处要求将device类的成员pDevType的类型修改为DevTypePtr。
mylist.push_back(d);
}
}
[解决办法]
根本不是只能指针的问题,根本就是lz逻辑不清。
按“谁new谁delete"的原则,既然你在类外new,那就该在类外delete,类的析构函数就不该去delete。
如果你在类的析构函数里delete,那就要在类内new。