sigsegv при взаимодействии с объектом структуры

Я пытаюсь написать класс который хранил бы карту блоков. Написал пробный вариант. Правда оказалось что вариант совсем не работоспособный.


struct block{
    uint units{30};
    sf::Color color{128,128,128};
    int owner_id{-1};
    sf::ConvexShape cube;

    void updateCube(const int &size, const sf::Color &ccolor={128,128,128}){
        cube.setPointCount(4); //sigsegv
        cube.setPoint(0,sf::Vector2f(0,0));
        cube.setPoint(1,sf::Vector2f(0,size));
        cube.setPoint(2,sf::Vector2f(size,size));
        cube.setPoint(3,sf::Vector2f(size,0));
        color = ccolor;
    }
};




class blockmap{
    typedef std::vector<block> line;
    std::vector<line> map;

public:

    blockmap(std::size_t x, std::size_t y, const int size){
        map.resize(y);
        for(std::size_t i{0};i!=y;i++){
            map[i].resize(x);
            for(std::size_t d{0};d!=x;d++){
                map[i][x].updateCube(size);
                map[i][x].cube.setPosition(i*(size+4),x*(size+4));
            }
        }


    }

    std::vector<block>& operator[](const std::size_t index){
        return map[index];
    }

    void draw(sf::RenderWindow &window){
        for(std::size_t y{0};y!=map.size();y++)
            for(std::size_t x{0};x!=map[y].size();x++){
                window.draw(map[x][y].cube);
            }
    }

};

Ответы (1 шт):

Автор решения: KoVadim

ох ох. внутренний цикл под d, а в индексе x. Логично, что выход за пределы

for(std::size_t d = 0;d<x;d++){
    map[i][d].updateCube(size);
    map[i][d].cube.setPosition(i*(size+4),x*(size+4));
}

и пишите нормально for. вот это d!=i когда то очень больно может ударить.

→ Ссылка