Ahoj, celý den řeším ve svém programu memmory leaky a je to docela bída. Řeším přiklad realizace třídy která má za pomocí metody Add, přidávat do pole ukazatelů nové hodnoty typu PERSON(STRING JMENo, STRING PRIJMENI, STRING ADR, STRING ADR). Přidávání funguje jako javovská implementace SortedSetu(HASH,TREE), tzn pokud existuje prvek nepřidá ho, pokud neexistuje přidáho na správnou pozici aby pole zustalo seřazené, jde tedy o množinu. Pro zjištění pozice používá logarytmické vyhledávání BinnarySearch.
Problém nastal v tom že při každém přidání v případě že je nutno prvky posunout (tedy se vkládá do prostřed pole nebo na začátek) nastane Memmory Leak, pokud se vkládá na konec pole memmory leak nenastane. Nemůžu zaboha přijít kde se to tam bere. Je to určitě způsobeno manipulací v poli s pointerama ale nevím čímto.
BinnarySearch vrací hodnotu možné pozice ve tvaru (-možnápozice -1) aby se odlišila nulová pozice. Tedy pokud vkládám do prostřed pole vytvořím si z tohoto tvaru přímý tvar a poté zkopíruji všechny prvky odzadu ( na konci pole čeká volné místo, konstruktor definuje locArr - index prvního volného místa vždy na nulu, tedy locArr ukazuje vždy na první volné místo).
Vše jsem si hezky nakreslil a nikde mi žádná pamět neuniká, nevím čím to je, prosím vás o pomoc :-) Moc děkuji
bool Add ( const string & oName, const string & oAddr, const string & cName, const string & cAddr ){
Person * p = new Person(oName,oAddr,cName,cAddr);
int possibleIndex;
possibleIndex = binarySearch(*p);
int index = -(possibleIndex+1);
if(possibleIndex>=0){return false;}
else{
reallocate();
for(int a=locArr; a>=index+1; a--){
if(a-1==index){
Person * pom = new Person(**(arrayList+a-1));
arrayList[a]=pom;
}else{
arrayList[a]=arrayList[a-1];}
}
delete arrayList[index];
arrayList[index] = p;
}locArr++;
return true;
}
Ještě konstruktory třídy person pro úplnost
public:
Person(const string Pname, const string Padress, const string Cname, const string Cadress){
this->Padress=Padress;
this->Pname=Pname;
this->Cname=Cname;
this->Cadress=Cadress;
}
Person(){
this->Pname="";
this->Padress="";
this->Cname="";
this->Cadress="";
}
Person(Person & p){
this->Pname=p.Pname;
this->Padress=p.Padress;
this->Cname = p.Cname;
this->Cadress= p.Cadress;
}