2015-12-08 23 views
1

我在我的一个项目上遇到了一个大问题。这个项目是跨平台的。 它在Linux上工作得很好,但在Windows中,填写地图时我有一个违规访问内存。std :: map :: operator []在Windows上违反访问内存

我的main.cpp看起来是这样的:

Server *s = new Server; 

s->init(4253); 

SERVER.CPP:

this->_commandManager.addFunction(C_CREATEROOM, &Server::createRoom); 
this->_commandManager.addFunction(C_JOINROOM, &Server::joinRoom); 
this->_commandManager.addFunction(C_LAUNCHGAME, &Server::createGame); 

最后我的命令管理:

bool CommandManager::addFunction(E_COMMAND type, bool (Server::*cmd)(ANetwork::t_frame frame, void *data)) 
{ 
    _commands[type] = cmd; 

    return true; 
} 

_commands是std::map<E_COMMAND, bool (Server::*)(ANetwork::t_frame, void*)>

类型

将cmd添加到_commands [type]在Linux(ubuntu和opensuse)上正常工作,但在Windows 10上使用VS Entreprise 2015发出违规访问内存。

+0

btw使用所有大写常量是反模式 – Slava

+0

这是一个枚举。不是一个常量 –

+1

无关紧要,大写标识符用于宏(这种习惯来自C到C++),并且很有可能你的常量或枚举会发生冲突,并且在最好的情况下,你会得到不明显的编译错误,在最糟糕的情况下难以捕捉运行时间。 – Slava

回答

1

如果您使用VS,请尝试在编译器中使用/ vmg选项。