解决“静态初始化命令惨败”的可能情况

时间:2017-12-14 00:02:16

标签: c++ static sfml

我在这个问题上花了很长时间,想知道你们中是否有人可以帮助我,尽管这可能是一个愚蠢的问题。

我正在使用名为TGUI的模块在SFML中制作游戏。我创建了自己的类来解释TGUI的事件,使用以下类:

#include "TGUIEvents.h"
#include <vector>
#pragma once
class TGUIEventHandler
{
public:
    static std::vector<TGUIEvent*> events;
    ~TGUIEventHandler();
};

TGUIEvent结构如下所示,并连接到TGUI使用的不同按钮或小部件:

#include "MenuStructure.h"
#include <TGUI/TGUI.hpp>
#pragma once
enum TGUIEvents : int{
    MESSAGE_BOX_OK=1,
    MESSAGE_BOX_YES=2,
    MESSAGE_BOX_NO=3,
    LOG_IN=4,
};

struct TGUIEvent
{
    MenuStructure menu; //Menu to remove
    TGUIEvents eventType; //Type of event
    std::vector<std::string> arguments;
};

之前,我在调试模式下编写代码,但决定切换到发布模式。当我切换到发布模式时,我开始注意到一个问题。如果我没有点击任何按钮,因此没有向TGUIEventHandler中的'events'的静态成员添加任何内容,那么7次中的7次程序将在关闭时崩溃。它提出了以下内容:

Exception thrown at 0x77DF918D (ntdll.dll) in Poker.exe: 0xC0000005: Access violation reading location 0x00000000.

即使我不启动游戏本身也会发生这种情况,但只是在'main'中启动一个没有任何内容的空程序。在稍微阅读了一些内容之后,我意识到这可能是一个被称为“静态初始化命令惨败”的问题,尽管我不确定。为什么这只发生在发布模式而不是调试模式?为什么只有在以前没有使用它时才会发生这种情况?为什么会发生这种情况,我该如何解决? 我将尝试一些可能导致完全摆脱静态数据类型的方法,但是保留这种静态数据类型的任何其他方法我都会非常感激。

谢谢。

0 个答案:

没有答案