#include <unordered_set>
class C {
public:
std::unordered_set<int> us;
};
int main() {
C* c;
c->us.insert(2); // 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
}
我在做什麼錯?指向持有unordered_set的對象的指針的分段錯誤
你得到一個分割的錯,因爲指針尚未分配:
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);' – IdeaHat
問題中的代碼不是我正在編寫的實際代碼。這是我的問題最簡單的形式,仍然產生了分段錯誤。在我的實際代碼中,「c」(實際上並不是「c」)需要是一個指針。 – anthropomorphic
menory沒有爲'c'對象 –
哇配置。這真是愚蠢。暫時還沒有使用C++,你能告訴嗎? = P – anthropomorphic