C++ 线程1:EXC_BAD_访问错误,此错误出现在cpp文件第一行的句柄函数中

C++ 线程1:EXC_BAD_访问错误,此错误出现在cpp文件第一行的句柄函数中,c++,sfml,C++,Sfml,这是一个创建鸡入侵者游戏的代码,当我初始化一只鸡的时候,这个游戏(或者我可以做的任何部分)运行得很好,但是当我把它做成一个2d鸡数组时,它显示了这个错误 RenderWindow window; int main(int, char const**) { chicken chick[4][7]; Sprite back; Clock clock; window.create(VideoMode(1800, 1000), "Menu"); while (w

这是一个创建鸡入侵者游戏的代码,当我初始化一只鸡的时候,这个游戏(或者我可以做的任何部分)运行得很好,但是当我把它做成一个2d鸡数组时,它显示了这个错误

RenderWindow window;
int main(int, char const**)
{
    chicken chick[4][7];
    Sprite back;
    Clock clock;
    window.create(VideoMode(1800, 1000), "Menu");

    while (window.isOpen())
    {
        Event event;
        while (window.pollEvent(event))
        {
            if (event.type == Event::KeyPressed && event.key.code == Keyboard::Escape)
                window.close();

            if (event.type == Event::Closed)
                window.close();

        }

        Texture texture;
        if (!texture.loadFromFile(resourcePath() + "background.jpg"))
        {
            std::cout << "Error loading texture" << std::endl;
        }

        Time time;
        time = clock.getElapsedTime();
        if (time.asSeconds() >= 0.001)
        {
            chick[4][7].handle(window, clock);
            clock.restart();
        }


        window.clear();
        back.setTexture(texture);
        back.setPosition(0, 0);
        back.setTextureRect(IntRect(0, 0, 1800, 1000));
        window.draw(back);
        for (int i = 0; i < 4; i++)
            for (int j = 0; j < 7; j++)
                chick[i][j].initialize(window);
        window.display();
    }
}
///////////////////
this is the app file for the chicken class
using namespace sf;
class chicken
{
private:
    RectangleShape chick;
    bool flag;
public:
    chicken();
    void initialize(RenderWindow &window);
    void handle(RenderWindow & window, Clock clock);
    ~chicken();
};
#endif /* chicken_hpp */
/////////////////////////////////////////////////////////////
this is the cpp file for the chicken class 
using namespace sf;

chicken::chicken()
{
    chick.setPosition(500, 500);
    chick.setSize(Vector2f(200, 200));
    chick.setOrigin(100, 100);
    flag = true;
}
void chicken::initialize(RenderWindow & window)
{
    Texture texture2;
    if (!texture2.loadFromFile(resourcePath() + "chicken3.jpg"))
    {
        std::cout << "Error loading texture" << std::endl;
    }
    chick.setTexture(&texture2);
    window.draw(chick);
}

void chicken::handle(RenderWindow & window, Clock clock)
{
    if (flag) //the error appears here
    {
        chick.move( 10 , 0 ) ;
    }
    else
    {
        chick.move(-10 , 0);
    }
    if (chick.getPosition().x >= window.getSize().x)
        flag = false;

    if(chick.getPosition().x < 0)
        flag = true;
}
chicken::~chicken()
{

}
RenderWindow窗口;
int main(int,字符常量**)
{
鸡只[4][7];
雪碧背;
时钟;
创建(视频模式(18001000),“菜单”);
while(window.isOpen())
{
事件;
while(window.pollEvent(事件))
{
if(event.type==event::KeyPressed&&event.key.code==Keyboard::Escape)
window.close();
if(event.type==event::Closed)
window.close();
}
纹理;
如果(!texture.loadFromFile(resourcePath()+“background.jpg”))
{

std::cout以后请在问题中包含整个错误消息,但是这里的问题是您正在访问鸡数组中的越界索引

您的数组大小为4x7,这意味着您的有效索引为0-3和0-6

您的句柄函数正在chick[4][7]上被调用,这超出了范围

如果您试图仅在数组中的最后一个小鸡上调用该函数,那么它将是

chick[3][6].handle(window, clock);
在每只鸡身上打电话,你需要一个双环

for(int i = 0; i < 4; ++i)
{
    for(int j = 0; j < 7; ++j)
    {
        chick[i][j].handle(window, clock);
    }
}
for(int i=0;i<4;++i)
{
对于(int j=0;j<7;++j)
{
小鸡[i][j].把手(窗、钟);
}
}

错误在哪里?请在问题中包含整个错误消息。