c++ sfml Ошибка прав доступа при попытки отрисовать текст

у меня есть класс: кнопка "RectButton" проблема в том что в этом классе есть текст который нужно отрисовать когда ты напрямую обращаешься из главного потока к объекту и передаешь окно то все работает, но если поставить посредника между ними у меня это класс:меню "GeneralMenu" который как бы должен управлять этими кнопками, и тут появляется ошибка доступа. Примечание в классе RectButton используеться шрифт chocolate.ttf его нужно добавить в папку с проектом, без него текст вообще не выводиться на экран

Ошибка:

Вызвано исключение по адресу 0x00007FFEE19969DB (sfml-graphics-d-2.dll) в MODRadar.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFFFFFFFFFFF.

Код программы:

#include <SFML\Graphics.hpp>
#include <stdio.h>
#include <iostream>
#include <thread>
#include <windows.h>
#include "psapi.h"

float area(sf::Vector2f a, sf::Vector2f b, sf::Vector2f c) {
    return abs((a.x - c.x) * (b.y - c.y) + (b.x - c.x) * (c.y - a.y));
}
bool inTriangle(sf::Vector2f a, sf::Vector2f b, sf::Vector2f c, sf::Vector2f d) {
    if (area(a, b, c) == area(a, b, d) + area(a, d, c) + area(b, d, c)) {
        return true;
    }
    return false;
}


//Класс реализующий кнопку

class RectButton {
    sf::RectangleShape button;
    sf::Font font;
    sf::Text text;
    sf::Color color[2];
    float posX, posY, sizeX, sizeY;
public:
    bool active = false;

    RectButton() {}
    RectButton(float posX, float posY, float sizeX, float sizeY, char* text, sf::Color color) {
        this->posX = posX;
        this->posY = posY;
        this->sizeX = sizeX;
        this->sizeY = sizeY;
        this->color[0] = color;
        button.setFillColor(color);
        button.setPosition(sf::Vector2f(posX, posY));
        button.setSize(sf::Vector2f(sizeX, sizeY));
        if (!font.loadFromFile("chocolate.ttf")) {
            std::cout << "ERROR FONT" << std::endl;
        }
        this->text.setFont(font);
        this->text.setString(text);
        this->text.setFillColor(sf::Color::White);
        this->text.setStyle(sf::Text::Bold | sf::Text::Underlined);
        this->text.setPosition(sf::Vector2f(posX, posY));
        CorrectText();
    }
    void CorrectText() {
        std::string str = text.getString();
        int n = str.length();
        int i = 100;
        while (text.findCharacterPos(n).x > button.getPosition().x + button.getSize().x) {
            text.setCharacterSize(i);
            i--;
            if (i < 0) {
                break;
            }
        }
    }
    bool is_Hovered(sf::RenderWindow& window) {
        sf::Vector2f pos = (sf::Vector2f)sf::Mouse::getPosition(window);
        sf::Vector2f pos1 = button.getPoint(0) + button.getPosition();
        sf::Vector2f pos2 = button.getPoint(1) + button.getPosition();
        sf::Vector2f pos3 = button.getPoint(2) + button.getPosition();
        sf::Vector2f pos4 = button.getPoint(3) + button.getPosition();
        if (inTriangle(pos1, pos2, pos3, pos)) {
            return true;
        }
        if (inTriangle(pos1, pos4, pos3, pos)) {
            return true;
        }
        return false;
    }
    void setColorBack(float R, float G, float B, float A) {
        button.setFillColor(sf::Color(R, G, B, A));
    }
    void Activate() {
        if (active) {
            active = false;
            Sleep(300);
        }
        else {
            active = true;
            Sleep(300);
        }
    }

    sf::Text getText() {
        return text;
    }
    void draw(sf::RenderWindow& window) {
        window.draw(button);
        window.draw(text);
    }
};
class GeneralMenu {
    sf::Texture texture[2];
    sf::Sprite sprite[2];
    sf::Texture texture1;
    sf::Sprite sprite1;
    sf::RectangleShape MenuBackGround;

    float posX, posY;
public:
    RectButton button;
    GeneralMenu(float x, float y) {
        posX = x;
        posY = y;
        MenuBackGround.setPosition(sf::Vector2f(x, y));
        MenuBackGround.setSize(sf::Vector2f(700, 500));
        MenuBackGround.setFillColor(sf::Color::Black);

        button = RectButton(posX, posY, 100, 300, (char*)"AIMBOT", sf::Color::Red);
    }
    void draw(sf::RenderWindow& window) {
        window.draw(MenuBackGround);
        button.draw(window);

    }
};
GeneralMenu menu = GeneralMenu(30.0, 75.0);

int main() {
    sf::RenderWindow window(sf::VideoMode(770,770), "MOD RADAR");
    RectButton buttons = RectButton(0, 0, 100, 300, (char*)"TEXT",
        sf::Color::Red);
    while (window.isOpen()) {
        sf::Event event;
        while (window.pollEvent(event))
            //Закрытие окна
            if (event.type == sf::Event::Closed ||
                sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) {
                window.close();
            }
        window.clear(sf::Color::Black);
        //тут отрисовка работает
        buttons.draw(window);
        //Тут классе RectButton выскакивает ошибка
        menu.draw(window);

        window.display();
    }
    return 0;
}

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

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

Просто объявляем шрифт глобально а не в классе кнопки

→ Ссылка