字体渲染函数C ++ SDL中未处理的异常

捏造

我正在PONG克隆上,只是在标题屏幕上。我有一个类来处理状态机的标题屏幕循环,它只使用很少的内容,仅使用一个sprite和一个true字体消息。但是,当我调用该函数以将消息呈现到SDL_Surface上时,它会将我的程序扔进了垃圾桶。我收到的错误Unhandled exception at 0x6F4C2A9D (SDL_ttf.dll) in Pong.exe: 0xC0000005: Access violation reading location 0x00000000.通常这意味着我没有初始化某些东西,也没有在类定义或某些东西中定义它,但是一切似乎都井井有条。因此,我将代码发布在这里,希望有人能看到render函数或其周围的内容。

为了清楚起见,在此行上引发了异常:

Title_Message = TTF_RenderText_Solid(font,“ PONG”,color);

//start code
/*CLASSES*/

class GameState
{
public:
    virtual void events() = 0;
    virtual void logic() = 0;
    virtual void render() = 0;
    virtual ~GameState(){};
};

class Button
{
public:
    SDL_Rect button_clip[2];
    SDL_Rect button;
    SDL_Surface *button_sprite = NULL;
    Button();
};

class Title : public GameState
{
private:
    SDL_Surface *Title_Message = NULL;
    SDL_Rect *clip;
    Button Title_Button;
public:
    void events();
    void logic();
    void render();
    Title();
    ~Title();
};

/*FONTS*/
SDL_Color color = { 255, 255, 255 };
TTF_Font *font = NULL;

bool init()
{
    //initialize all SDL subsystems
    if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
    {
        return false;
    }
    //set up screen
    screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE);
    //check screen
    if (screen == NULL)
    {
        return false;
    }
    //init TTF
    if (TTF_Init() == -1)
    {
        return false;
    }
    //set window caption
    SDL_WM_SetCaption("PONG", NULL);
    //if evetything worked
    return true;
}

//load files
bool load_files()
{
    font = TTF_OpenFont("PIXELITE.ttf", 45);
    if (font == NULL)
    {
        return false;
    }
    return true;
}

/*CLASS DEFINITIONS*/

Button::Button()
{

}

Title::Title()
{
    Title_Message = TTF_RenderText_Solid(font, "PONG", color);
    Title_Button.button_sprite = load_image("Start.png");
    Title_Button.button.x = 200;
    Title_Button.button.y = 350;
    Title_Button.button.w = 100;
    Title_Button.button.h = 50;
    //clips not hover
    Title_Button.button_clip[0].x = 0;
    Title_Button.button_clip[0].y = 0;
    Title_Button.button_clip[0].w = 100;
    Title_Button.button_clip[0].h = 50;
    //clips hover
    Title_Button.button_clip[1].x = 0;
    Title_Button.button_clip[1].y = 50;
    Title_Button.button_clip[1].w = 100;
    Title_Button.button_clip[1].h = 50;
}

Title::~Title()
{
    SDL_FreeSurface(Title_Message);
    SDL_FreeSurface(Title_Button.button_sprite);
}

void Title::events()
{
    int x = 0;
    int y = 0;
    while (SDL_PollEvent(&event))
    {
        if (event.type == SDL_MOUSEMOTION)
        {
            x = event.motion.x;
            y = event.motion.y;
            if ((x > Title_Button.button.x) && (x < (Title_Button.button.x + Title_Button.button.w)) && (y > Title_Button.button.y) && (y < (Title_Button.button.y + Title_Button.button.h)))
            {
                clip = &Title_Button.button_clip[1];
            }
            else
            {
                clip = &Title_Button.button_clip[0];
            }
        }
        if (event.type == SDL_QUIT)
        {
            quit = true;
        }
    }
}

void Title::logic()
{

}

void Title::render()
{
    apply_surface(Title_Button.button.x, Title_Button.button.y, Title_Button.button_sprite, screen, clip);
    apply_surface((SCREEN_WIDTH - Title_Message->w) / 2, 100, Title_Message, screen);
}

有人知道吗?谢谢!

用户名

我将从评论中提出我的建议作为实际答案:

引起故障的行Title_Message = TTF_RenderText_Solid(font, "PONG", color);引用fonttype的全局变量TTF_Font*该行也是该类的构造函数的一部分Title

main 看起来像这样:

int main(int argc, char* args[])
{
    //init SDL
    init();
    //load everything
    load_files();
    currentState = new Title;
    //...

fontNULL在声明时被初始化为,仅分配一个实际对象,该对象在第一次实例化之前load_files()的开始执行mainTitle

因此load_files()必须为分配一个有效的指针font,否则下一行将main导致访问冲突。

load_files()根据创建和分配该对象是否成功提供一个返回值。但是,main永远不要检查该值,因此不能保证它font是有效的指针。

正如knefcy指出的那样,问题出在load_files()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++中的“未处理的异常”

来自分类Dev

C ++中未处理的异常

来自分类Dev

SDL2 C++ 未处理的异常

来自分类Dev

在Python中引发未处理的C异常

来自分类Dev

PL/SQL 函数 Oracle 中未处理异常

来自分类Dev

与C ++ CLI Wrapper交谈的C#中未处理的异常

来自分类Dev

与C ++ CLI Wrapper交谈的C#中未处理的异常

来自分类Dev

C#在调用堆栈中捕获未处理的异常

来自分类Dev

未处理的异常访问C ++中的循环违规

来自分类Dev

C#在调用堆栈中捕获未处理的异常

来自分类Dev

未处理的异常处理更改了C ++

来自分类Dev

C# Winforms 处理未处理的异常

来自分类Dev

关于cvFloodFill()函数的OpenCV未处理异常

来自分类Dev

函数“MoveNext”中发生未处理的异常

来自分类Dev

大向量/数组的C ++未处理异常

来自分类Dev

C#序列未处理异常

来自分类Dev

Qt C ++未处理的异常堆栈跟踪

来自分类Dev

C# 抛出未处理的异常错误

来自分类Dev

C# 未处理的参数异常

来自分类Dev

在C中:未处理的异常:0xC0000005:访问冲突写入位置。程序无法运行

来自分类Dev

C#中通用类型<T>的未处理异常,因为文件大小不是字节的倍数

来自分类Dev

在C ++中读取通过ZMQ发送的Flatbuffers对象会引发未处理的异常

来自分类Dev

未处理的异常访问冲突写入位置0xCDCDCDCD-在Structure C ++中

来自分类Dev

未处理的异常访问冲突写入位置0xCDCDCDCD-在Structure C ++中

来自分类Dev

在C ++中读取通过ZMQ发送的Flatbuffers对象会引发未处理的异常

来自分类Dev

C#-Windows窗体-如何从任务中捕获未处理的异常

来自分类Dev

在 MS Visual C++ 中调试未处理异常的正确方法

来自分类Dev

“未处理的 JS 异常:t 不是函数。(在 't(c)' 中,'t' 为 false)”在生产包 React Native 上

来自分类Dev

使用抽象函数时出现未处理的异常

Related 相关文章

  1. 1

    C ++中的“未处理的异常”

  2. 2

    C ++中未处理的异常

  3. 3

    SDL2 C++ 未处理的异常

  4. 4

    在Python中引发未处理的C异常

  5. 5

    PL/SQL 函数 Oracle 中未处理异常

  6. 6

    与C ++ CLI Wrapper交谈的C#中未处理的异常

  7. 7

    与C ++ CLI Wrapper交谈的C#中未处理的异常

  8. 8

    C#在调用堆栈中捕获未处理的异常

  9. 9

    未处理的异常访问C ++中的循环违规

  10. 10

    C#在调用堆栈中捕获未处理的异常

  11. 11

    未处理的异常处理更改了C ++

  12. 12

    C# Winforms 处理未处理的异常

  13. 13

    关于cvFloodFill()函数的OpenCV未处理异常

  14. 14

    函数“MoveNext”中发生未处理的异常

  15. 15

    大向量/数组的C ++未处理异常

  16. 16

    C#序列未处理异常

  17. 17

    Qt C ++未处理的异常堆栈跟踪

  18. 18

    C# 抛出未处理的异常错误

  19. 19

    C# 未处理的参数异常

  20. 20

    在C中:未处理的异常:0xC0000005:访问冲突写入位置。程序无法运行

  21. 21

    C#中通用类型<T>的未处理异常,因为文件大小不是字节的倍数

  22. 22

    在C ++中读取通过ZMQ发送的Flatbuffers对象会引发未处理的异常

  23. 23

    未处理的异常访问冲突写入位置0xCDCDCDCD-在Structure C ++中

  24. 24

    未处理的异常访问冲突写入位置0xCDCDCDCD-在Structure C ++中

  25. 25

    在C ++中读取通过ZMQ发送的Flatbuffers对象会引发未处理的异常

  26. 26

    C#-Windows窗体-如何从任务中捕获未处理的异常

  27. 27

    在 MS Visual C++ 中调试未处理异常的正确方法

  28. 28

    “未处理的 JS 异常:t 不是函数。(在 't(c)' 中,'t' 为 false)”在生产包 React Native 上

  29. 29

    使用抽象函数时出现未处理的异常

热门标签

归档