c++ - 指向 std::map 的指针问题

标签 c++ stl stdmap std

请考虑以下代码,我在将值插入 std::map 对象时遇到访问冲突。不知道为什么。您看到的代码使用了

std::map<int, int>

然而,我最初尝试过

std::map<int, MSGTYPE>

具有相同的结果访问冲突。 (我知道枚举是 INT)。

// a common include file has this
// common.h

enum MSGTYPE
{
  MSG_R1,
  MSG_A1,
  MSG_L1,
  MSG_S1,
  MSG_S2
};

typedef std::map<int, int> SYSMsgMap;

typedef struct _MYOBJ
{
  int x1;
  int x2;
  SYSMsgMap XFerMap;
}MYOBJ;

我对这些结构的使用如下所示:

MYOBJ *cMYOBJ::AddNetwork(cvnet *net)
{
MYOBJ *ob;

  ob = new MYOBJ();

  // initialization code removed for this post/brevity

  BuildMsgMap(ob->XFerMap);

  // rest removed for this post/brevity
}

void cMYOBJ::BuildMsgMap(std::map<int, int> &mm)
{

  mm.clear();

  switch(NETTYPE)
  {
    case 1: 
      mm[ 1] = MSG_R1;  <-- Access violation here!
      mm[ 2] = MSG_A1;
      mm[ 4] = MSG_L1;
      mm[16] = MSG_S1;
      mm[32] = MSG_S2;
    break;

 // rest removed...
}

最佳答案

ob 不会被 memset(ob, sizeof(MYOBJ), 0)ob = new MYOBJ; 之后的某处意外清除在调用 BuildMsgMap() 之前?

(因为代码是遗留的,因为 memset 技巧在 C 中经常使用。)

关于c++ - 指向 std::map 的指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6473269/

相关文章:

c++ - 如何在 cuda 和 cpp 文件之间正确链接创建的函数?

c++ - 有没有办法不继承子类中函数的 "virtualness"?

c++ - 运算符删除导致堆损坏,而运算符新工作正常

c++ - 处理异常 std::out_of_range C++

c++ - 无法在 std::map 成员变量中分配具有前向声明值的类

c++ - c++ vector 中的 push_back 与 operator[] 赋值

c++ - 自定义 STL 迭代器类

c++ - 我们可以在一个 STL 列表中保存 2 种数据类型吗?

c++ - 如何从 std::map 中的 std::pair 的 std::vector 获取输入?

C++调用存储在映射结构中的函数指针