我在这个问题上花了很长时间,想知道你们中是否有人可以帮助我,尽管这可能是一个愚蠢的问题。
我正在使用名为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'中启动一个没有任何内容的空程序。在稍微阅读了一些内容之后,我意识到这可能是一个被称为“静态初始化命令惨败”的问题,尽管我不确定。为什么这只发生在发布模式而不是调试模式?为什么只有在以前没有使用它时才会发生这种情况?为什么会发生这种情况,我该如何解决? 我将尝试一些可能导致完全摆脱静态数据类型的方法,但是保留这种静态数据类型的任何其他方法我都会非常感激。
谢谢。