KERN_PROTECTION_FAILURE在地址使用静态映射和std::make_pair
KERN_PROTECTION_FAILURE at address using static map and std::make_pair
我得到这个错误
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
(通常)是不可重入的。您必须使用互斥锁来保护该函数,或者使用线程本地存储。
相关文章:
- 使用std::函数映射对象方法
- 使用"std::unordereded_map"映射到"std::list"对象
- C++匿名结构作为std::映射值
- 如何从存储在std::映射中的std::集中删除元素
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- 当键值是 std 向量时,为什么使用 at in C++ 访问映射值如此缓慢?
- tao_idl -Gstl 不映射 std::string
- <char> 使用 Vulkan 映射内存时如何使用 std::vector 而不是 void**?
- 附加使用 Struct 作为"multikey"并将 std::vector 用作映射值的映射
- 我可以将新的 std::tuple 放入内存映射区域,并在以后读回吗?
- 如何初始化 std::向量的映射?
- 如何将不同的函数签名映射到同一个 std::map?
- 从匿名命名空间映射的辅助值抛出 std::bad_alloc
- 将唯一指针插入std::映射
- C++ODB数据库映射程序:无法在关系中使用std::weak_ptr
- 如何在C++中迭代集合映射(std::map<std::set< char>, int >)?
- std::int 和 struct 内存不足的映射 (std::Bad_alloc) c++
- 编译器不推导模板参数(映射std::vector->std::vector)