Chciałbym dowiedzieć się dlaczego w moim programie operator new w metodzie dolacz(Osoba* osoba) przydziela dokładnie ten sam obszar pamięci co w poprzednim wywołaniu operatora new, przecież z definicji new powinno przydzielać "świeży" obszar pamięci.
#include <iostream>
//#include "../Chusteczka.h"
using namespace std;
#ifndef __OSOBA_H__
#define __OSOBA_H__
struct Osoba{
enum Plec{K,M};
Osoba(Plec p) : plec(p) {}
Plec plec;
};
#endif
// #inlcude "Osoba.h"
#ifndef CHUSTECZKA_H
#define CHUSTECZKA_H
struct Persona
{
bool chusteczka;
Osoba *Flash;
bool amwodzirej;
unsigned int id;
Persona* right;
Persona* left;
Persona(Osoba *F,unsigned int i, bool c, bool w, Persona *r, Persona *l)
{
right= r;
left= l;
amwodzirej= w;
chusteczka= c;
Flash= F;
id= i;
}
};
class Chusteczka
{
public:
Chusteczka() : idcounter(0)
{
wodzirej= new Persona(new Osoba(Osoba::K), idcounter, true, true, 0, 0); // Tutaj! 1 raz
wodzirej->left=wodzirej;
wodzirej->right=wodzirej;
current= wodzirej;
cout << "Moj prawy " << wodzirej->right << endl;
cout << "Moj lewy " << wodzirej->left << endl;
cout << "no i ja " << wodzirej << endl;
}
~Chusteczka() // do zrobienia
{
delete wodzirej;
}
unsigned int dolacz(Osoba* osoba)
{
if(osoba == 0) return 0;
if(!isalready(osoba))
{
Persona* tempychuj;
cout << "Adres tempychuj" << tempychuj << endl;
wodztest();
cout << "To: " << new Persona(osoba, ++idcounter, false, false, 0, 0) << endl; // i TU ZLE PRZYDZIELA, wcale nie nowy obszar pamieci :(
cout << "tempychujright left: " << tempychuj << " " << tempychuj->right << " " << tempychuj->left << endl;
wodztest();
}
else return 0;
}
bool wodztest()
{
std::cout << wodzirej->id << endl;
cout << "Moj prawy " << wodzirej->right << endl;
cout << "Moj lewy " << wodzirej->left << endl;
cout << "no i ja " << wodzirej << endl;
//if (wodzirej->left == wodzirej) std::cout << wodzirej->left->id;
}
private:
unsigned int idcounter;
bool isalready(Osoba* osoba)
{
Persona *tmp= wodzirej;
tmp=tmp->left;
while(tmp->id != 0)
{
//std::cout << tmp->left->id << std::endl;
if(tmp->Flash == osoba) {delete tmp; return 1;}
else tmp=tmp->left;
}
delete tmp;
return 0;
}
Persona *wodzirej;
Persona *current;
};
#endif // CHUSTECZKA_H
using namespace std;
int main()
{
Chusteczka h;
Osoba p(Osoba::K);
Osoba q(Osoba::M);
Osoba r(Osoba::K);
Osoba s(Osoba::M);
//h.wodztest();
cout << h.dolacz(&p);
//h.wodztest();
//cout << h.dolacz(&q);
cout << "Hello world!" << endl;
return 0;
}