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

c – 使用for循环删除对象数组,第1张

概述我在弄清楚如何删除作业中的对象数组时遇到了麻烦. 宣言如下: Sprite* gCharacter[64] ; 然后在WndProc功能. case WM_DESTROY: for(int i = 0; i < 64;i++){ delete gCharacter[i]; } delete gBackground; 我在弄清楚如何删除作业中的对象数组时遇到了麻烦.

宣言如下:

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是最常见的.

总结

以上是内存溢出为你收集整理的c – 使用for循环删除对象数组全部内容,希望文章能够帮你解决c – 使用for循环删除对象数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存