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 に答える