Я занимаюсь практикой кодирования на C++ в Visual Studio и продолжаю показывать эту проблему как заголовок. Я знаю, где проблема, но я не понимаю, почему это происходит и как ее решить. Пожалуйста, помогите мне с этим.нарушение доступа к чтению местоположение 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;
Однако, я не могу объяснить, почему это происходит.
Пожалуйста, не стесняйтесь обращаться ко мне, если требуется дополнительная информация.
С наилучшими пожеланиями,
Yi Ji
Похоже, что 'ClassTemplete :: questionName_questionPointer_map_' не инициализирован или инициализирован для NULL и индексирования массивов на этой недопустимой карте, вы пытаетесь сохранить что-то в ** 0x000 ... 4 ** –
Вы пытались разыменовать нуль указатель. –
На самом деле, чем больше я думаю об этом, это звучит как проблема инициализации на одном элементе, определенном в другой единицы перевода (class_templete.cpp).Это не правильный способ использования Singleton, методы доступа, которые завершают их, - это путь. –