访问成员stl map

时间:2015-12-04 08:18:36

标签: c++ stl segmentation-fault member-variables

我真的试图推迟提出这个问题,因为它似乎应该是一个简单的问题,但是这里有。我一直在用一段新代码追逐一个段错误。我已经包含了展示下面这个问题的最小块。其余的代码已经工作了一段时间。

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的堆栈跟踪(是的,已经广泛使用,没有明显的空指针)引起了stl_tree.h:1157的责任,它定义了对函数。但是,如果我注释掉插入行和else if块,那么程序仍然会在stl_tree中的另一个模糊行号中出现段错误。
  • 我在access()中测试了代码,方法是使memberMap成为访问中的局部变量并在循环中调用代码。

有关进一步调试步骤的任何想法或建议吗?

1 个答案:

答案 0 :(得分:0)

可能你已经删除了原始代码以保持简洁,但它没有正确地传达问题而且不可重现。

虽然它看起来没有任何问题但是如果您使用非本机和本地类类型的键/值对映射,则可能需要两者的复制构造函数。