求解!读取位置时发生访问冲突的问题
今天遇见一个问题,相关代码如下:
////////////////////////////////
//HelloWorldScene(h):
////////////////////////////////
#include "cocos2d.h"
#include "Box2D/Box2D.h"
#include "BallScene.h"
#include "SimpleAudioEngine.h"
class HelloWorld : public cocos2d::CCLayer
{
略
private:
BallScene * BallScene;
};
////////////////////////////////
//HelloWorldScene(cpp):
////////////////////////////////
略
BallScene->newball();
略
////////////////////////////////
//BallScene(h):
////////////////////////////////
#include "CreateBall.h"
using namespace cocos2d;
class BallScene : public cocos2d::CCNode
{
public:
void newball();
private:
CreateBall * CreateBall;
CCSprite* pSprite1;
Ball *ball;
};
////////////////////////////////
//BallScene(cpp):
////////////////////////////////
void BallScene::newball()
{
CCSize winsize = CCDirector::sharedDirector()->getWinSize();
srand((unsigned)time(0));
ball=CreateBall->getBall((kBallColor)(int (rand() % 2)+1),(kBallType)(int (rand() % 2)));
pSprite1=ball->sprite;
pSprite1->setPosition(ccp(winsize.width/2, winsize.height-30));
addChild(pSprite1,1);
}
////////////////////////////////
//CreateBall(h):
////////////////////////////////
#ifndef __CreateBall__
#define __CreateBall__
#include "cocos2d.h"
using namespace cocos2d;
typedef enum
{
red=1,
purple,
}
kBallColor;
typedef enum
{
square=0,
circular,
}
kBallType;
class Ball : public cocos2d::CCObject
{
public:
kBallColor color;
kBallType type;
CCSprite *sprite;
};
class CreateBall : public CCLayer
{
public:
CreateBall();
~CreateBall();
Ball* getBall(kBallColor color,kBallType type);
};
#endif
////////////////////////////////
//CreateBall(cpp):
////////////////////////////////
Ball* CreateBall::getBall(kBallColor color,kBallType type)
{
char file[40] ;
memset(file, 0, 40);
sprintf(file, "Ball1%d%d.png",color,type);
Ball * ball=new Ball;
ball->sprite=CCSprite::create(file);
ball->type = type;
ball->color = color;
return ball;
}
调试时报错:
0x00256062 处的第一机会异常(在 fantastic ocean.win32.exe 中): 0xC0000005: 读取位置 0xCDCDF16D 时发生访问冲突。
0x00256062 处有未经处理的异常(在 fantastic ocean.win32.exe 中): 0xC0000005: 读取位置 0xCDCDF16D 时发生访问冲突。
调用堆栈中错误指向:
ball=CreateBall->getBall((kBallColor)(int (rand() % 2)+1),(kBallType)(int (rand() % 2)));
我查了一下说多数是因为指针为NULL报错,可是我看了半天没明白为什么会没有取到。还是说因为其它的错误?
请高手指点!