我正在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)中定义的单例的初始化问题。这不是使用单例的正确方法,包装它们的访问器方法是要走的路。 –