c – 使用for循环删除对象数组

我在弄清楚如何删除作业中的对象数组时遇到了麻烦.

宣言如下:

Sprite*     gCharacter[64] ;

然后在WndProc功能.

case WM_DESTROY:
        for(int i = 0; i < 64;i++){
            delete gCharacter[i];
        }
        delete gBackground;
        delete gBackBuffer;
        DeleteDC(ghSpriteDC);
        PostQuitMessage(0);
        return 0;

有了这个for循环,我得到了断言错误,就像我会尝试这样的东西:

delete gCharacter[0];
delete gCharacter[0];

我无法弄清楚为什么会发生这种情况以及如何正确删除这个数组.如果没有,我只会手动输入:删除gCharacter [从0到63],但这看起来很混乱.

这固定了

for(int i = 0; i < 180; i++){
            gCharacter[i] = 0;
            delete gCharacter[i];
        }

此错误:_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)
但我不知道为什么我必须先设置NULL值.

最佳答案 鉴于您发布的代码有限,有两个明显的情况,您将在循环中获得断言:

1)64个指针中的一个(或多个)未正确初始化.如果您最初没有将指针初始化为NULL,并且没有为每个指针调用new而没有例外,那么64个删除中的一个将失败,因为它将尝试释放尚未分配的内存(删除NULL指针有效且什么也不做,但没有断言)

2)64个指针中的一些指向同一个Sprite实例.在这种情况下,当第一个指针被删除时,第二个指针仍然指向相同的存储器地址,该存储器地址已经被解除分配(并且在此期间甚至可能为了不同的目的而重新分配).对同一内存地址的第二次删除将失败,并且无双重断言.

显然有其他情况你可以得到一个断言,但你没有发布足够的代码来彻底调试,我列出的2是最常见的.

点赞