0xC0000005

我给人物技能写了一个定时器,判断条件是:
1.如果它(技能)与发射位置(Sinitial_x)在x方向的距离超过300,就removeChild(skill),并停止定时器;
||2.如果它飞行到了屏幕边框位置,就removeChild(skill),并停止定时器;
||3.如果它与地图上的怪物碰撞,就removeChild(skill),并停止定时器;
源代码如下:
//人物技能飞行动画和击中判断
void forest::skill_schedule(float dt)
{
if (is_skill_flying)
{

	if (PinitialRotationY == 180)
	{
		skill->setPositionX(skill->getPositionX() + 30);
	}
	else if (PinitialRotationY == 0 || PinitialRotationY == 360)
	{
		skill->setPositionX(skill->getPositionX() - 30);
	}
}
log("skill = %d", skill);
log("skill_position_x = %f", skill->getPositionX());

if (abs(skill->getPositionX() - Sinitial_x) >= 300)
{
	is_skill_flying = false;
	
	removeChild(skill, true);
	this->unschedule(schedule_selector(forestScene::skill_schedule));
}
else if (skill->getPositionX() <= 50 || skill->getPositionX() >= 1150)
{
	removeChild(skill, true);
	is_skill_flying = false;
	this->unschedule(schedule_selector(forestScene::skill_schedule));
}
else
{
	//Vector<ghost*> ghostToDelete;
	Rect skillRect(skill->getPositionX(),skill->getPositionY(),skill->getContentSize().width,skill->getContentSize().height);
	for (auto gh : ghostMonster)
	{
		Rect ghostRect(gh->getPositionX(),gh->getPositionY(),gh->getContentSize().width,gh->getContentSize().height);
		if (ghostRect.intersectsRect(skillRect))
		{
			gh->ghostHP -= 20;
			if (gh->ghostHP <= 0)
			{
				//ghostMonster.eraseObject(gh);
			}
			removeChild(skill, true);
			is_skill_flying = false;
			this->unschedule(schedule_selector(forestScene::skill_schedule));
		}
	}
}

}
但是调试的时候发现,一旦达到其中一个条件,进行removeChild操作的时候,就会跳出如下错误:

然后这个错误我查了一下说一般是因为使用了NULL指针,然后我把指针打印出来,如下:

然后我就想不通是为什么:pensive:,求解答