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) 解决方法
鉴于您发布的代码有限,有两个明显的情况,您将在循环中获得断言:
1)64个指针中的一个(或多个)未正确初始化.如果您最初没有将指针初始化为NULL,并且没有为每个指针调用new而没有例外,那么64个删除中的一个将失败,因为它将尝试释放尚未分配的内存(删除NULL指针有效且什么也不做,但没有断言) 2)64个指针中的一些指向同一个Sprite实例.在这种情况下,当第一个指针被删除时,第二个指针仍然指向相同的存储器地址,该存储器地址已经被解除分配(并且在此期间甚至可能为了不同的目的而重新分配).对同一内存地址的第二次删除将失败,并且无双重断言. 显然有其他情况你可以得到一个断言,但你没有发布足够的代码来彻底调试,我列出的2是最常见的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |