KERN_PROTECTION_FAILURE在地址使用静态映射和std::make_pair

KERN_PROTECTION_FAILURE at address using static map and std::make_pair

本文关键字:映射 std make pair 静态 FAILURE PROTECTION 地址 KERN      更新时间:2023-10-16

我得到这个错误

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;
}

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

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