シェイプの配列を含むゲームオブジェクトがあります(mallocを介して割り当てられます)。シェイプにはポイントのリストがあり、継承してポリゴンにすることができます。初期コード:
GameObject g1(true, true);
Color c(0, 0, 1, 0);
Point p(100, 100, 0);
Polygon s(p, c);
s.addPoint(p);
s.createRegularShape(4, 50.0f);
g1.addShape(s);
これはヘッダーにあります。
Shape* shapes;
ここで壊れます(データにアクセスしようとすると)
void GameObject::draw(unsigned int gameTime)
{
if(visible)
{
for(int i = 0; i < count; i++)
shapes[i].draw();//Access violation happens here
}
}
これは、Shape 配列に Shape を追加する方法です。
void GameObject::addShape(Shape const& shape)
{
if(count == size)
{
size += 4;
shapes = (Shape*)realloc(shapes, sizeof(Shape) * size);
}
shapes[count] = shape;
count++;
}
これは、Shape にメモリを割り当てる場所です。これは、形状配列にメモリを割り当てる必要があるときにコンストラクターで呼び出されます。
void GameObject::clearShapes(int size)
{
if(count > 0)
free(shapes);
shapes = (Shape*)malloc(sizeof(Shape) * size);
count = 0;
GameObject::size = size;
}
基本的に、私は何を間違っていますか?このコードからアクセス違反が発生するのはなぜですか? データはすべて正しいサイズであり、正当であるように見えます。