1
#include <unordered_set>

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

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

我究竟做错了什么?

4

1 回答 1

4

由于尚未分配指针,您会遇到分段错误:

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

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

于 2013-07-18T17:47:00.200 回答