axmol/tests/test-cpp/Classes/BugsTest/Bug-422.cpp

61 lines
1.5 KiB
C++
Raw Normal View History

2011-07-08 11:22:35 +08:00
//
// Bug-422 test case by lhunath
// http://code.google.com/p/cocos2d-iphone/issues/detail?id=422
//
#include "Bug-422.h"
bool Bug422Layer::init()
{
if (BugsTestBaseLayer::init())
{
reset();
2011-07-08 11:22:35 +08:00
return true;
}
2011-07-08 11:22:35 +08:00
return false;
2011-07-08 11:22:35 +08:00
}
void Bug422Layer::reset()
{
static int localtag = 0;
localtag++;
2011-07-08 11:22:35 +08:00
// TO TRIGGER THE BUG:
// remove the itself from parent from an action
// The menu will be removed, but the instance will be alive
// and then a new node will be allocated occupying the memory.
// => CRASH BOOM BANG
auto node = getChildByTag(localtag-1);
log("Menu: %p", node);
removeChild(node, true);
// [self removeChildByTag:localtag-1 cleanup:NO];
2011-07-08 11:22:35 +08:00
auto item1 = MenuItemFont::create("One", CC_CALLBACK_1(Bug422Layer::menuCallback, this) );
log("MenuItemFont: %p", item1);
MenuItem *item2 = MenuItemFont::create("Two", CC_CALLBACK_1(Bug422Layer::menuCallback, this) );
auto menu = Menu::create(item1, item2, NULL);
menu->alignItemsVertically();
2011-07-08 11:22:35 +08:00
float x = CCRANDOM_0_1() * 50;
float y = CCRANDOM_0_1() * 50;
2013-07-12 14:11:55 +08:00
menu->setPosition(menu->getPosition() + Point(x,y));
addChild(menu, 0, localtag);
2011-07-08 11:22:35 +08:00
//[self check:self];
}
void Bug422Layer::check(Node* t)
2011-07-08 11:22:35 +08:00
{
auto& children = t->getChildren();
for(const auto &child : children) {
2014-01-22 13:47:29 +08:00
log("%p, rc: %d", child, child->getReferenceCount());
check(child);
}
2011-07-08 11:22:35 +08:00
}
void Bug422Layer::menuCallback(Object* sender)
2011-07-08 11:22:35 +08:00
{
reset();
2011-07-08 11:22:35 +08:00
}