我真的很想推迟问这个问题,因为它似乎应该是一个简单的问题,但这里有。我一直在追逐一段新代码中的段错误。我已经包含了演示以下问题的最小块。其余的代码已经工作了一段时间。
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 中另一个模糊的行号处出现段错误。
- 我通过将 memberMap 设置为 access 中的局部变量并在循环中调用代码来测试 access() 中的代码。
关于进一步调试步骤的任何想法或建议?