使用静态地图和std :: make_pair的地址为KERN_PROTECTION_FAILURE

时间:2014-03-26 21:19:15

标签: c++ multithreading segmentation-fault exc-bad-access

我收到此错误

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0xb064425c

调用以下函数时:

const std::map<FunctionID, std::string> getEnumElementsStringRepresentation() {
  static bool is_initialized = false;
  static std::map<FunctionID, std::string> enum_string_representation; // Fails here
  if (false == is_initialized) {
    enum_string_representation.insert(std::make_pair(FunctionID.capabilities, "capabilities"));
    ... many more similar inserts
    is_initialized = true;
  }
  return enum_string_representation;
}

这似乎是一个读/写错误,但我不确定最好的调试方法。

1 个答案:

答案 0 :(得分:2)

你说你的代码是多线程的。由于函数静态map实例,getEnumElementsStringRepresentation不是可重入的(通常)。您必须使用互斥锁保护该功能,或使用线程本地存储。