我正在Visual Studio中執行C++編碼練習,並將此問題顯示爲標題。我知道問題發生在哪裏,但我不知道爲什麼會發生,以及如何解決問題。請幫我解決一下這個。訪問衝突讀取位置0x000000004
class_templete.h
typedef std::string QuestionName;
class ClassTemplete
{
public:
ClassTemplete(Question iQuestionName);
private
static std::map<QuestionName,ClassTemplete *> questionName_questionPointer_map_;
}
class_templete.cpp
map<QuestionName, ClassTemplete *> ClassTemplete::questionName_questionPointer_map_;
ClassTemplete::ClassTemplete(QuestionName iQuestionName)
{
ClassTemplete::questionName_questionPointer_map_[iQuestionName] = this;
}
chapter1_question1.h
class C1Q1 : public ClassTemplete
{
public:
C1Q1(QuestionName iQuestionName) : ClassTemplete(iQuestionName) {};
private:
static QuestionName question_name_;
static C1Q1 question_instance_;
}
chapter1_question1.cpp
QuestionName C1Q1::question_name_ = "C1Q1";
C1Q1 C1Q1::question_instance_(C1Q1::question_name_);
我發現,問題發生在這個地方,當我運行程序:
ClassTemplete::questionName_questionPointer_map_[iQuestionName] = this;
但是,我無法解釋爲什麼會發生。
如果需要更多信息,請隨時與我聯繫。
親切的問候,
艾吉
聽起來像'ClassTemplete :: questionName_questionPointer_map_'未初始化,或初始化爲NULL,並在此無效映射上的數組下標引起您嘗試在** 0x000處存儲某些內容... 4 ** –
您嘗試解引用null指針。 –
事實上,我對此的看法越多,這聽起來像是一個在不同翻譯單元(class_templete.cpp)中定義的單例的初始化問題。這不是使用單例的正確方法,包裝它們的訪問器方法是要走的路。 –