Witam.
Posiadam dwie klasy w oddzielnych plikach. W konstruktorach tych klas próbuję zainicjować wskaźniki, które wskazują naprzemiennie na te klasy. Program kompiluje się, ale po jego uruchomieniu wywala "naruszenie pamięci". Jeśli zakomentuje ptr_A lub ptr_B program uruchamia się normalnie.
Jak widać nie jestem ekspertem w klasach i wskaźnikach. Podejrzewam, że problem polega na tym, że w konstruktorze ClassA tworzę nową instancję ClassB i przypisuje jej adres do wskaźnika, a z kolei w konstruktorze ClassB tworzę nową instancję ClassA, to się zapętla i stąd "naruszenie pamięci". Proszę o potwierdzenie lub dokładne wyjaśnienie tego problemu. Jak można inaczej rozwiązać ten problem?
#ifndef CLASSA_H
#define CLASSA_H
#include <string>
#include "ClassB.h"
using namespace std;
class ClassB;
class ClassA
{
public:
ClassA();
~ClassA();
void run();
void ShowStringFromClassB();
string getStringA();
protected:
private:
string stringA;
ClassB* ptr_B;
};
#endif // CLASSA_H
#include "ClassA.h"
#include <iostream>
ClassA::ClassA()
{
stringA = "Klasa A\n";
//ptr_B = new ClassB();
cout << "ptr_B: " << ptr_B << endl;
}
#ifndef CLASSB_H
#define CLASSB_H
#include <iostream>
#include <string>
#include "ClassA.h"
using namespace std;
class ClassA;
class ClassB
{
public:
ClassB();
~ClassB();
void ShowStringFromClassA();
string getStringB();
protected:
private:
string stringB;
ClassA* ptr_A;
};
#endif // CLASSB_H
#include "ClassB.h"
ClassB::ClassB()
{
stringB = "Klasa B\n";
ptr_A = new ClassA;
cout << "ptr_A: " << ptr_A<< endl;
}
#include <iostream>
#include "ClassA.h"
using namespace std;
int main()
{
ClassA klasaA;
klasaA.run();
return 0;
}