ultra Temat założony przez niniejszego użytkownika |
Kasowanie tablic w liście i samego wskaźnika » 2017-04-23 20:10:15 Cześć, mam listę jednokierunkową, w każdym elemencie mam zainicjowane dwie tablice. Podczas gdy czyszczę listę otrzymuję błąd "Zgłoszony wyjątek". Nie mam zielonego pojęcia dlaczego to się tak dzieje, może Wy macie jakiś pomysł? struct lista { lista * next; char znak[ 20 ]; int cyfra[ 20 ]; } * head;
void czysc( lista *& head ) { lista * p; p = head; if( p == nullptr ) return; do { head = p->next; delete p; } while( head != nullptr ); }
|
|
pekfos |
» 2017-04-23 20:13:09 do { head = p->next; delete p; } while( head != nullptr ); |
Wielokrotnie wołasz delete p, ale p się nie zmienia. |
|
ultra Temat założony przez niniejszego użytkownika |
» 2017-04-23 20:18:11 Jak mogłem tego nie zauważyć, dzięki :D Dopisałem do funkcji zmianę p na głowę, ale hm, nadal błąd się pojawia. |
|
pekfos |
» 2017-04-23 20:48:28 Minimalny przykład powodujący błąd. |
|
ultra Temat założony przez niniejszego użytkownika |
» 2017-04-23 20:59:03 Hm to jest chyba wina VS bo teraz to nawet błąd wyskakuje przy tworzeniu nowego wskaźnika. |
|
ultra Temat założony przez niniejszego użytkownika |
» 2017-04-23 22:33:48 Ok, to jednak nie wina VS. Więc tak. Na początku pakuję do tablic w liście wartości. Moja lista wygląda w ten sposób: lista->znak[ 0 ] = 'a'; lista->cyfra[ 0 ] = 1; lista->znak[ 1 ] = 'b'; lista->cyfra[ 1 ] = 1; lista->znak[ 2 ] = 'c'; lista->cyfra[ 2 ] = 1; lista->znak[ 3 ] = 'd'; lista->cyfra[ 3 ] = 1; lista->znak[ 4 ] = 'e'; lista->cyfra[ 4 ] = 1;
I tak dalej, i tak dalej. Następnie wykonuje operacje na tej liście, zamianę wskaźników kolejnością, wypisywanie, dopisywanie do niej. Na koniec listę chcę zwolnić z pamięci więc wykonuję ten kod, który podałem wcześniej. Do head przypisuje mi pięknie następnika wskaźnika, mój wskaźnik p jest odłączony od listy (ale nadal zawiera kolejne wskaźniki w polu ->next) i teraz wywołuje delete p;. W tym momencie wyskakuje mi błąd "Zgłoszony wyjątek": "Element program.exe wyzwolił punkt przerwania.: wystąpił wyjątek". Nie mam pojęcia dlaczego tak się dzieje. Piszę w Visual Studio 2017. Wolałbym kodu nie wstawiać, ale jeśli to będzie potrzebne, to chciałbym go później skasować, wiadomo, moje wypociny. |
|
pekfos |
» 2017-04-23 22:38:51 Zajmująca historia, ciężko jednak ją debugować. ale jeśli to będzie potrzebne, to chciałbym go później skasować, wiadomo, moje wypociny. |
Kasowanie treści postów to szybki sposób na bana. To będzie już twój drugi raz.. |
|
ultra Temat założony przez niniejszego użytkownika |
» 2017-04-24 22:11:27 Naprawiłem błąd :) Problem był taki, że miałem dwie funkcje nazwane tak samo ale z innymi parametrami. |
|
« 1 » |