程序CRASH 求救(指针数组)
#define MAX_BAG_SIZE 36
protected:
// Bag Storage space
Item* m_bagslot[MAX_BAG_SIZE];
Bag::~Bag()
{
for(int i = 0; i <MAX_BAG_SIZE; i++)
{
if(IsBadWritePtr(m_bagslot[i],sizeof(Item))==NULL)
{
delete m_bagslot[i];(程序会crash在这里)
}
}
}
求指教~~~~~~~~~~~
[解决办法]
Item* m_bagslot[MAX_BAG_SIZE];
Bag::Bag()
{
for(int i = 0; i <MAX_BAG_SIZE; i++)
{
m_bagslot[i] = NULL;
}
}
Bag::~Bag()
{
for(int i = 0; i <MAX_BAG_SIZE; i++)
{
if(m_bagslot[i] != NULL)
{
delete m_bagslot[i];
}
}
}
.......
[解决办法]
先完成 指针数组的 初始化...
IsBadWritePtr 只是判断是否具有写权限,
但是如果你的指针是非 new 获得的,
也没有初始化,那么就可能出错 ....
而且这个思想也肯定不对。
在析构中,根据 IsBadWritePtr 结果决定是否 delete,
那么,一个问题,这个指针数组中的元素是否都是 new 获得空间的?
如果是, 那么就都应该 delete ...
[解决办法]
贴出 m_bagslot 是如何操作的吧..
[解决办法]
delete出錯時可能性很多:
1。 delete的地址已經delete過。
2. 內存越界訪問,破壞了內存管理的列表。
3. delete的對象的析構函數中也有錯誤,包括上面兩點。
總之沒有具體代碼,我們是沒辦法判斷出來是哪兒的錯的。
[解决办法]
关注!
程序CRASH (指针数组)
程序CRASH 求救(指针数组)#defineMAX_BAG_SIZE36protected://BagStoragespaceItem*m_bagslot[MAX_BAG_SIZE
