Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dlaczego wycieki pamieci? - konstruktor klasy BST

Ostatnio zmodyfikowano 2015-04-11 11:57
Autor Wiadomość
Brunon3
» 2015-04-10 14:07:16
BSTNode to jakaś Twoja klasa czy jakaś biblioteka? Jeżeli Twoja to pokaż jej kod, nie jestem obeznany z tym setFather(), itp. ;)

-BD.
P-130504
shadow193
Temat założony przez niniejszego użytkownika
» 2015-04-10 14:12:34
BSTnode to klasa pojedynczego wezla w drzewie. Potrzebny kod dolaczylem na poczatku tematu.
P-130505
akwes
» 2015-04-10 14:27:55
@Brunon3,

Takie moje "9 Przykazań Programistycznych". ;)
i?

@michal11
Mi osobiście przeszkadza pisanie this wszędzie i dawania klamerek w tej samej linii co nazwa funkcji(java style)
I co z tego, że Tobie przeszkadza? Argumenty: dlaczego źle i dlaczego bez jest lepiej?

@shadow193
Sprowadź wszystko do minimalnego przypadku. Wycieki pamięci powoduje już samo utworzenie drzewa czy dopiero operacje na nim? Skopiuj sobie projekt i eliminuj kolejno funkcje i operacje aż w końcu wyciek zniknie. Będziesz wiedział gdzie szukać.

Ewentualnie w każdym konstruktorze dodaj informację o tworzeniu się obiektu a w destruktorze o jego usuwaniu. Zobaczysz czy usuwasz tyle samo razy co alokujesz.

A reszcie gratuluję za całą stronę postów bez ani jednej propozycji rozwiązania...
P-130507
michal11
» 2015-04-10 14:42:15
@akwes
Napisałem shadow193 w pierwszym poście jakiego narzędzia może użyć do wykrycia wycieku i, że jago kod jest nieczytelny. Zapytał co jest nie tak i mu odpowiedziałem, co mi przeszkadza w jego kodzie, po co mam to argumentować ?

Wracając jeszcze do tematu, jakiej wersji VS używasz ? Ja korzystałem co prawda tylko raz z tego artykułu, pod VS 2013 i z tego co pamiętam to pokazywało tam również w którym miejscu jest wyciek.
P-130509
shadow193
Temat założony przez niniejszego użytkownika
» 2015-04-10 14:47:10
Korzystam z wersji 2013 ultimate. Pokazuje linijke, jednakze jest to numer linii z jakiegos pliku ktory on przygotowuje juz w trakcie kompilacji lub cos z w tym stylu ze wszystkich plikow, bo mam numery linii od 150 do 160 a zaden z moich plikow nie ma wiecej niz 80 linii, dlatego ciezko mi sie odniesc, w tej chwili ucze sie do innego kolokwium wieczorkiem potestuje jeszcze program, wycieki sa tylko przy dodawaniu wartosci, przy samej inicjalizacji nie ma.
P-130510
darko202
» 2015-04-10 15:03:26
Wycieki pamięci polegają na tym, ze rezerwuje się określona pamięć, i jej nie zwalnia.

C/C++
zwalnianie delete
1.

BSTree::~BSTree() {
    this->recursive_tree_destruction( this->getroot() );
    BSTnode * helper = this->getsentinel();
    //this->set_sentinel(nullptr);
    //this->setroot(nullptr);
    delete helper;
}
// tu zwolniłeś wskaźnik a nie całe drzewo

2.
void BSTree::recursive_tree_destruction( BSTnode * node ) {
    if( node != this->getsentinel() ) {
        this->recursive_tree_destruction( node->getleft() );
        this->recursive_tree_destruction( node->getright() );
        delete node;
    }
}
//zastanów się czy if pozwala zwolnić bieżącego node
chyba nie zwalnia
P-130511
shadow193
Temat założony przez niniejszego użytkownika
» 2015-04-10 22:15:43
Zastanawiam sie dlaczego if mialby nie pozwalac mi na zwolnienie pamieci ? Czy moze ktos odpowiedziec na to pytanie w miare wyczerpujaco ?
P-130538
shadow193
Temat założony przez niniejszego użytkownika
» 2015-04-11 00:07:48
Znalazlem blad w kodzie.
Uprzejmie dziekuje wszystkim zaangazowanym w watek za pomoc - bardzo to doceniam.
Temat do zamkniecia,
pozdrawiam shadow193.
P-130541
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona