Invalid pointer не могу найти ошибку

Ошибка в куче. Пробовала все, ничего не получается.

#include <iostream>
#include <vector>
#include <typeinfo>

class Parent {
public:
    Parent() {
        x = new int(0);
    }

     ~Parent() { 
        delete x; 
    };

     void init(Parent obj, std::vector<Parent*>& vec, int repeat)
     {
         for (int i = 0; i < repeat; i++)
         {
             *obj.x += 1;
             vec.push_back(&obj);
         }
     }
public:
    int* x;
};

class Child : public Parent {
public:
    Child() {
        *x = 100;
    };

    ~Child()
    {
        delete x;
    }
};


int main()
{
    int repeat;
    std::cout << "Enter the number of repetitions : ";
    std::cin >> repeat;

    std::vector<Parent*> vecX;
    Parent objPrnt;
    Child objChld;

    objPrnt.init(objPrnt, vecX, repeat);
    objChld.init(objChld, vecX, repeat);

    for (int i = 0; i < vecX.size(); i++)
    {
        delete vecX.at(i);
    }
}

Ответы (1 шт):

Автор решения: Harry

Как минимум двойное удаление - в деструкторе предка и в деструкторе потомка...

Но куда хуже -

vec.push_back(&obj);

Этот адрес - адрес копии переданного в функцию аргумента, который при выходе из функции исчезает, т.е. какой-то совершенно левый адрес!

А потом вы еще собираетесь его удалять. Даже если бы это был корректный адрес - он не выделен с помощью new, удалять его нельзя.

Я даже не могу посоветовать, как исправлять столь бредовую ситуацию...

→ Ссылка