bad_alloc SFML

0

Piszę ostatnio prostą gierkę (snake) przy użyciu SFML.
Napotkałem niestety na pewien błąd. Gdy program tworzy gracza to występuje wyciek pamięci RAM.
Sam nie mogłem znaleźć błędu dlatego proszę was o pomoc.
Kod z prawdopodobnym miejsce wycieku:
metody klasy Player

 Player::Player(int n)
{
    points=rotation=0;
    length=3;
    deltaX=-1;
    deltaY=0;
    loadTexture();
    for(int i=0;i<n;i++)
    {
        int j=0;
        if(i=0)
        {
            if(i==n-1)
            {
                j=2;
            }
            else
            {
                j=1;
            }
        }
        snake.push_back(Snake((16+i)*40-20,9*40-20,j,&texture,0));
    }
}

Player::~Player()
{
    //dtor
}
void Player::loadTexture()
{
    if(!texture.loadFromFile("data/texture/playerSet.png"))
    {
        MessageBox(NULL,"PlayerSet not found!","ERROR",NULL);
		return;
    }
}

jej plik .h:

#ifndef PLAYER_H
#define PLAYER_H
#include <vector>
#include "Snake.h"
#include <windows.h>
using namespace sf;
using namespace std;

class Player
{
    public:
        Player(int=3);
        virtual ~Player();
        void draw(RenderWindow *);
        int getPoints();
        void add();
        void move(int,int);
        void update();
        Vector2f getPosition();

    private:
        vector <Snake> snake;
        int length;
        int points;
        Texture texture;
        int deltaX;
        int deltaY;
        int rotation;
        void loadTexture();


};

#endif // PLAYER_H
 

klasa snake:

 #ifndef SNAKE_H
#define SNAKE_H
#include <SFML/Graphics.hpp>
using namespace sf;
class Snake
{
    public:
        Snake(int,int,int,Texture*,int=0);
        virtual ~Snake();
        void draw(RenderWindow *);
        Vector2f getPosition();
        void setNumber(int);
        void setPosition(Vector2f,int);
        void move(int,int,int);
        int getRotation();
    private:
        Sprite sprite;
        int number;
        int rotation;
        Vector2f position;
        Texture *texture;
        void setSprite();
        void setSpritePosition();
};

#endif // SNAKE_H

i jej metody:

 nake::Snake(int xx,int yy,int n,Texture *tex,int r)
{
    position.x=xx;
    position.y=yy;
    number=n;
    rotation=r;
    texture=tex;
    sprite.setTexture(*texture);
    setSprite();
    setSpritePosition();
}

Snake::~Snake()
{
    //dtor
}
void Snake::setSprite()
{
    switch(number)
    {
    case 0:
        sprite.setTextureRect(IntRect(0,0,40,20));
        break;
    case 1:
        sprite.setTextureRect(IntRect(40,0,40,20));
        break;
    case 2:
        sprite.setTextureRect(IntRect(80,0,40,20));
        break;
    }
    sprite.setOrigin(Vector2f(20,10));
    sprite.setRotation(rotation);

}
Vector2f Snake::getPosition()
{
    return position;
}
int Snake::getRotation()
{
    return rotation;
}
void Snake::move(int xx,int yy,int rot)
{
    position.x+=xx*40;
    position.y+=yy*40;
    rotation=rot;
}
void Snake::setPosition(Vector2f vec,int rot)
{
    position=vec;
    rotation=rot;
    setSpritePosition();
}
void Snake::setSpritePosition()
{
    sprite.setPosition(position);
}
void Snake::setNumber(int n)
{
    number=n;
}
void Snake::draw(RenderWindow *win)
{
    win->draw(sprite);

PS Znacie funkcje w SFML zwracającą pozycję sprite?

Z góry dzięki za odpowiedzi.

0

Znalazłem błąd. W konstruktorze Player zamiast

if(i!=0) 

mam

if(i=0)

Więc petla wykonywała sie nieskończenie wiele razy.
Dzieki wszystkim za pomoc i link do dokumentacji SFML.

1 użytkowników online, w tym zalogowanych: 0, gości: 1