HEAP: Free Heap block xxxxx modified at xxxxx after it was freed

错误描述

今天,用vs2012调试Cocos2d-x写的项目时,观察到一个问题。调试的过程中不会报错,不会退出,但是关闭窗口后会触发一个断点,同时在“输出”窗口显示本文标题中的内容。

断点位置

free.c 文件中的 **retval = HeapFree(_crtheap, 0, pBlock);**

错误原因

破坏了堆内存,用new运算符申请的内存使用delete释放之后,错误的修改了指针指向的地址的内容。

查找之后发现,我的 Model 类继承了 cocosd::Node ,但是我不希望使用cocos2d的引用计数法自动管理内存,而是更喜欢手动管理的方式,在我delete之后,cocos2d又一次调用了release成员函数。

解决方法

不再继承 cocosd::Node 。。。由于用的MVC的模式,Model类继承Node只是为了使用cocos2d的计时器,但是这不是必须的,与其向autorelease妥协,还不如把这一点小功能移到View类中。
可读性和效率相比,见仁见智吧。

博客链接:
http://www.cnblogs.com/wolfred7464/

你可能感兴趣的:(AFTER)