Вызвано исключение: нарушение доступа для чтения. _Pnext было 0xDDDDDDE1
Есть следующая программа, состоящая из трёх файлов:
main.cpp:
#include <iostream>
#include <string>
#include "Osnova.h"
using namespace std;
int main()
{
string root, parent, name;
cin >> root;
cl_base2* ob = new cl_base2(0, root);
cl_base* ob_root = ob;
cl_base2* temp = 0;
for (int i = 0; ; i++)
{
cin >> parent >> name;
if (parent == name)
break;
if (i != 0 && ob->get_object_name() != parent)
ob = temp;
temp = new cl_base2(ob, name);
}
cout << ob_root->get_object_name() << endl;
ob_root->showtree();
delete ob_root;
delete temp;
return(0);
}
Osnova.h:
#ifndef OSNOVA_H
#define OSNOVA_H
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class cl_base
{
string object_name;
cl_base* p_parent;
public:
cl_base(cl_base* p_parent, string s_object_name);
cl_base(cl_base* p_parent);
~cl_base();
string get_object_name();
void set_object_name(string name);
void showtree();
vector <cl_base* > children;
vector <cl_base* > ::iterator it_child;
};
class cl_base1 : public cl_base
{
public:
using cl_base::cl_base;
};
class cl_base2 : public cl_base
{
public:
using cl_base::cl_base;
};
#endif
Osnova.cpp
#include <iostream>
#include "Osnova.h"
using namespace std;
cl_base::cl_base(cl_base* p_parent, string s_object_name)
{
set_object_name(s_object_name);
this->p_parent = p_parent;
if (this->p_parent != 0)
this->p_parent->children.push_back(this);
}
cl_base::cl_base(cl_base* p_parent)
{
this->p_parent = p_parent;
}
cl_base::~cl_base()
{
for (int i = 0; i < this->children.size(); i++)
{
delete this->children[i];
}
}
void cl_base::set_object_name(string s_object_name)
{
object_name = s_object_name;
}
string cl_base::get_object_name()
{
return object_name;
}
void cl_base::showtree()
{
cout << this->get_object_name();
for (int i = 0; i < this->children.size(); i++)
{
cout << " " << this->children[i]->get_object_name();
}
for (int i = 0; i < this->children.size(); i++)
{
if (this->children[i]->children.size() != 0)
{
cout << endl;
children[i]->showtree();
}
}
}
В среде Code::blocks программа компилируется и работает нормально. В visual studio она также компилируется, но при попытке заставить её работать вылетает с ошибкой, которую я написал в названии темы. В чём проблема? Данные на вход:
Object_root Object_root Object_1 Object_root Object_2 Object_root Object_3 Object_3 Object_4 Object_3 Object_5 Object_6 Object_6