访问成员stl映射时的C++Segfault
C++ Segfault when accessing member stl map
我真的试着推迟问这个问题,因为它看起来应该是一个简单的问题,但现在开始了。我一直在寻找一段新代码中的一个segfault。我在下面包含了演示这个问题的最小部分。代码的其余部分已经运行了一段时间。
class A {
private:
std::map <uint64_t, uint32_t> memberMap;
public:
A();
~A();
void access() {
const uint64_t key = 1;
uint32_t value = 1;
if(memberMap.count(key) == 0) {
memberMap.insert(std::pair<uint64_t, uint32_t>(key, value));
} else if(memberMap[key] < value) {
memberMap[key] = value;
}
}
};
class B : public BsParent {
private:
A handler;
public:
B();
~B();
uint64_t access(Data dat) {
//...
handler.access();
//...
}
};
到目前为止我所尝试的。。。
- 您会注意到没有显式指针
- 我已经检查过是否调用了A()
- gdb的堆栈跟踪(是的,已经在没有明显空指针的情况下大量使用了它)将责任归咎于定义pair函数的stl_tree.h:1157。然而,如果我注释掉插入行和else-if块,程序仍然会在stl_tree中的另一个模糊行号处分段
- 我在access()中测试了代码,使memberMap成为access中的局部变量,并在循环中调用代码
对进一步的调试步骤有什么想法或建议吗?
您可能已经精简了原始代码以保持简单性,但它没有正确地传达问题,并且不可复制。
虽然看起来没有任何问题,但如果您有具有非本机和本地类类型键/值对的映射,则可能需要这两者的复制构造函数。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 将函数类成员映射到类本身内部
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 使用std::函数映射对象方法
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++映射分割错误(核心转储)
- C++中带有List类的迭代器Segfault
- 内联映射初始化的动态atexit析构函数崩溃
- 使用"std::unordereded_map"映射到"std::list"对象
- 如何从多映射中删除特定的重复项
- 在未初始化映射的情况下,将值插入到映射的映射中
- QT通过C++添加映射QML项目
- 在c++中访问int到类对象的映射时出错
- C STL映射中的SegFault由于过程退出期间的静态可变清理而找到
- std::为GCC中的默认参数segfault映射带有空大括号初始值设定项的参数
- C++-映射迭代器访问导致segfault
- 无序映射擦除segfault
- 访问成员stl映射时的C++Segfault