访问成员 STL 映射时的 C++ 段错误

标签 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 的堆栈跟踪(是的,已经在没有明显空指针的情况下广泛使用它)将责任归咎于定义 pair 函数的 STL_tree.h:1157。但是,如果我注释掉插入行和 else if block ,程序仍然会在 STL_tree 中另一个模糊的行号处出现段错误。
  • 我通过将 memberMap 设为 access 中的局部变量并在循环中调用代码来测试 access() 中的代码。

对进一步的调试步骤有什么想法或建议吗?

最佳答案

可能您已经削减了原始代码以保持简单性,但它没有正确传达问题并且不可重现。

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

关于访问成员 STL 映射时的 C++ 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34083745/

相关文章:

c++ - 编译时对 boost::system::system_category() 的 undefined reference

c++ - 如何防止在 c 中的 cin 之后生成新的 rand()?

c++ - 用于查找范围重叠的内存效率更高的算法

没有名称的 C++11 STL 容器数组

c - 尝试写入修改后的结构时出现段错误

c - 在 C 中使用 Strtok() 时出现段错误

c - 我正在尝试为一个类实现一个基本的 shell,但不断出现段错误。在我创建 getCommandAndArgs 函数之前它可以工作,为什么现在不行呢?

c++ - 在 main() 中定义全局变量

c++ - 在与应用程序相同的窗口中显示 Qt 虚拟键盘

用于列表和 map 的 C++ 容器