c++ - 带有指向持有 unordered_set 的对象的指针的段错误

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

#include <unordered_set>

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

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

我做错了什么?

最佳答案

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

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

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

关于c++ - 带有指向持有 unordered_set 的对象的指针的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17730545/

相关文章:

c++ - 制作可变参数函数,它接受任意仿函数并返回输入仿函数的每个返回值的元组

c - 尝试从用户库访问函数时出现段错误

c++ - 如何将所有 xml 格式的 xmlNodePtr 转换为字符串?

c++ - 实现 C++ 后缀增量运算符

c++ - QT造物主: OpenCV dll lib can not be added ("File format not recognized")

c++ - 正确的 -std 与 'decltype(auto)' 以及如何使用 Cmake 更改 -std

c++ - 如何在不借助 std::function 的情况下存储函数对象?

c++ - 调用 pthread_create() 时出现段错误 C++ Linux

c++ - 在解析相同的参数时,有时会出现段错误

c++ - 将 String^ 转换为 std::string(基本字符串)-> 错误。我怎样才能解决这个问题?