【问题标题】:Segmentation Fault with a pointer to an object holding an unordered_set带有指向持有 unordered_set 的对象的指针的分段错误
【发布时间】:2013-07-18 17:45:42
【问题描述】:
#include <unordered_set>

class C {
public:
    std::unordered_set<int> us;
};

int main() {
    C* c;
    c->us.insert(2); // Segmentation Fault
}

我做错了什么?

【问题讨论】:

  • 没有为c 对象分配内存
  • 哇。我真傻。好久没用过C++了,你知道吗? =P

标签: c++ c++11 segmentation-fault unordered-set


【解决方案1】:

你得到一个分段错误,因为指针没有被分配:

C* c = new C; // <<== Add this
c->us.insert(2);
delete c;    // <<== Free the memory

与声明为对象而不是指针的对象(例如C c;)不同,需要初始化指针:您应该为它们分配现有对象的地址,或者使用运算符new为新对象分配内存。取消引用未初始化的指针被认为是未定义的行为,通常会导致分段错误。

【讨论】:

  • 或者更好的是,根本不要制作“新”C,因为你不需要。就做C c; c.us.insert(2);
  • 问题中的代码不是我正在编写的实际代码。这是我的问题的最简单形式,仍然产生了分段错误。在我的实际代码中c(实际上并没有命名为“c”)需要是一个指针。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 2021-11-22
  • 1970-01-01
  • 2022-11-11
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多