抛出异常:读取访问冲突。 this->callbacks 是 0xCDCDCDCD

时间:2021-06-26 14:44:47

标签: c++ visual-studio-2010

我一直在查看表单以了解为什么会引发此异常,我看到的原因之一是指针未初始化。我有一个回调类,它有一个纯虚函数,用于将状态插入到地图中。

 class Motor_callbacks
     {
     public:

        Motor_callbacks() {};
        virtual ~Motor_callbacks() {};

        virtual void insert_status(struct Motor_status) = 0; 
     };

我正在另一个名为 Station 的类中使用此回调类。其中有一个名为 Assembly 的子类。这是 Station 的头文件。

class Station: public Motor_callbacks
     {
     public:

        Station() {};
        virtual ~Station() {};

        std::vector<Assembly*> assembly
        
        int prepare(); 
        int assemble(); 
        void insert_status(struct Motor_status); 
     };

这是 Station 类的 CPP 文件

int Station::prepare()
{
  std::vector<Element> children = element.get_children("assembly");
  const uint32_t num_children = children.size();
  if (children.size() != 0)
  {
     for (unsigned int idx = 0; idx < num_children; ++idx)
     {
        Assembly *tmp = new Assembly;
        if (tmp->prepare(children.at(idx)) != 0)
        {
           delete tmp;
           return 1;
        }
        else
        {
           assembly.push_back(tmp);
        }
     }
  }
 }

int Station::assemble()
{assembly.at(i)->set_callback(this);}

 void Station::insert_status(Motor_status _insert_status)
{
// Map Insert
ccsid_Mtrstatus_map.insert(std::pair<uint32_t, Motor_status>(_insert_status.id,_insert_status));}

在Assembly 类中,我调用了一个指向Motor_callback 类的回调函数,这是Assembly 的头文件

class Assembly: public Motor_callbacks
     {
     public:

        Assembly() {};
        virtual ~Assembly() {};
        Stator *stator; 
        void set_callback(Motor_callbacks *_mtr_callback);
     };

这是用于组装的 CPP 文件。

int Assembly::prepare()
 {
   stator = new Stator;
     if (stator == nullptr || stator->prepare() != 0)
     {
        error = true;
        delete stator;
        stator = nullptr;
        return 1;
     }
 }

int Assembly::update()
{
  bool error = false;
  if (stator== nullptr || stator->update() != 0)
  {
  error = true;
  return 1;
  }
  else
  {
  Motor_status stator_status_tmp;
  stator_status_tmp.availability_status = stator->stator_avail();
  stator_status_tmp.fault_status = stator->stator_fault();
  stator_status_tmp.id = atoi(stator->stator_id().c_str());
  if (check_status_history(stator_status_tmp))
  {
     //Callback for the API to pass data to the map
     _stator_callbacks->insert_zone_status(stator_status_tmp);  //Exception is thrown Here
  } }}

void Stator::set_callback(Motor_callbacks * _mtr_callback)
{_stator_callbacks = _mtr_callback;}

不知道我哪里出错了。我应该在代码中更改什么以摆脱该异常。

0 个答案:

没有答案
相关问题