Witam
może mi ktoś wytłumaczyć na tym przykładzie dlaczego kompilator wywala błąd ochrony pamięci ? (kluczowy moment to funkcja B::void fun()) zdaje mi się ze ze wskaźnika już nie korzystam a więc usuwam i wychodzę z funkcji...Jak w takim razie poprawnie usunąć taki wskaźnik.
#include <iostream>
using namespace std;
class A
{
int *tab;
public :
A()
{
tab = new int[10];
for (int i = 0; i < 10; i++)
tab[i] = i;
}
~A()
{
delete []tab;
}
int* return_tab()
{
return tab;
}
};
class B
{
A *obj_A;
int x;
public :
B()
{
obj_A = new A;
}
~B()
{
delete obj_A;
}
int return_x()
{
return x;
}
void fun()
{
int *tmp_wsk = obj_A->return_tab();
for (int i = 0; i < 10; i++)
{
if (tmp_wsk[i] > 5)
{
x = tmp_wsk[i];
delete tmp_wsk; // tutaj usuwanie i wyjscie z funkcji
return;
}
}
}
};
int main()
{
B obj_B;
obj_B.fun();
cout << obj_B.return_x();
return 0;
}