<分区>
我真的试图推迟问这个问题,因为它看起来应该是一个简单的问题,但现在开始了。我一直在寻找一段新代码中的段错误。我已经包含了证明以下问题的最小块。其余代码已经运行了一段时间。
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 block ,程序仍然会在 STL_tree 中另一个模糊的行号处出现段错误。
- 我通过将 memberMap 设为 access 中的局部变量并在循环中调用代码来测试 access() 中的代码。
对进一步的调试步骤有什么想法或建议吗?