M
Monarh
Не могу разобраться зачем он так поступает
Имеется 2 класса:
При добавлении, первый раз, класса Cls_A в функции Cls_B::Allocation()
на стадии (1) выделяется память нормально.
на стадии (2) добавляется в вектор нормально.
При добавлении, второй раз, класса Cls_A в функции Cls_B::Allocation()
на стадии (1) выделяется память нормально.
на стадии (2) программа заползает в деструктор первого объекта и всю память чистит и только после этого, со спокойной душой, добавляет второй объект.
Хотя первый объект почищен vector.size() == 2 и вроде как указатели указывают на теже адреса, но по тем же адресам уже совсем не то, что надо.
И на последующем шаге при обращении к первому объекту программа завершает работу с ошибкой.
Подскажите пожалуйста что не так делаю и как надо.
Заранее всем большое спасибо !!!
![Frown :( :(](https://cdn.jsdelivr.net/joypixels/assets/8.0/png/unicode/64/1f641.png)
Имеется 2 класса:
Код:
class Cls_A
{
char* CA_Format;
void* VPtr_Array;
Cls_A();
void* Allocation( string& Format ); // В соответствии с содержимым строки Format выделяет память под CA_Format и VPtr_Array;
void DeAllocation();
~Cls_A();
}
Cls_A::Cls_A()
{
CA_Format = NULL;
VPtr_Array = NULL;
}
void Cls_A::DeAllocation()
{
if( CA_Dimensions_Info != NULL )
{
delete[] CA_Dimensions_Info;
CA_Dimensions_Info = NULL;
}
if( VPtr_Array != NULL )
{
delete[] (char*)VPtr_Array;
VPtr_Array = NULL;
}
}
Cls_A::~Cls_A()
{
DeAllocation();
}
Код:
class Cls_B
{
...
vector<Cls_A> VecCls_A;
void* Allocation();
...
}
void* Cls_B::Allocation()
{
...
Cls_A* ClsPtr_A = NULL;
ClsPtr_A = new Cls_A;
...
void* VPtr_Array;
(1) VPtr_Array = ClsPtr_A -> Allocation( Str_Format );
// Вставляем вновь созданный Массив в найденную позицию Place_for_Insert.
(2) VecCls_A.insert( Place_for_Insert( VPtr_Array ), (*ClsPtr_A) );
...
}
При добавлении, первый раз, класса Cls_A в функции Cls_B::Allocation()
на стадии (1) выделяется память нормально.
на стадии (2) добавляется в вектор нормально.
При добавлении, второй раз, класса Cls_A в функции Cls_B::Allocation()
на стадии (1) выделяется память нормально.
на стадии (2) программа заползает в деструктор первого объекта и всю память чистит и только после этого, со спокойной душой, добавляет второй объект.
Хотя первый объект почищен vector.size() == 2 и вроде как указатели указывают на теже адреса, но по тем же адресам уже совсем не то, что надо.
И на последующем шаге при обращении к первому объекту программа завершает работу с ошибкой.
Подскажите пожалуйста что не так делаю и как надо.
Заранее всем большое спасибо !!!