宣言如下:
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循环删除对象数组所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)