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, удалять его нельзя.
Я даже не могу посоветовать, как исправлять столь бредовую ситуацию...