程序CRASH (指针数组)

程序CRASH 求救(指针数组)#defineMAX_BAG_SIZE36protected://BagStoragespaceItem*m_bagslot[MAX_BAG_SIZE

程序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的對象的析構函數中也有錯誤,包括上面兩點。

總之沒有具體代碼,我們是沒辦法判斷出來是哪兒的錯的。
[解决办法]
关注!