c ++访问地图时的访问冲突

时间:2014-08-10 07:00:51

标签: c++ function access-violation functor

我有一个map<string, std::function<void(AgentMessage&)>>(AgentMessage是一个带有几个字符串的结构)。当我尝试使用迭代器访问它时,我在pair的复制函数上遇到访问冲突。

注意:std :: function指向的函数位于与复制位置不同的dll中。

编辑:我认为解释对于一段简单的代码来说已经足够了,但仍然 - 这就是它。

for (map<string, std::function<void(AgentMessage&)>>::iterator it = mapRef.begin(); it != mapRef.end(); it++)
{
    auto functionCopy = it->second; // IT CRASHES HERE
}

1 个答案:

答案 0 :(得分:1)

您能否显示将元素插入地图的代码?

我试过这个并且有效:

#include <functional>
#include <map>
#include <string>

using namespace std;

struct AgentMessage
{

};

void f(AgentMessage& am)
{

}

void g(AgentMessage& am)
{

}

int main()
{
    AgentMessage am;
    map<string, std::function<void(AgentMessage&)>> m;

    m["f"] = f;
    m["g"] = g;

    for (map<string, std::function<void(AgentMessage&)>>::iterator it = m.begin(); it != m.end(); ++it)
    {
        auto func = it->second;
        func(am);
    }
}