• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

problem ze wskażnikami

VPS Starter Arubacloud
0 głosów
331 wizyt
pytanie zadane 21 listopada 2017 w C i C++ przez Hackerino Nowicjusz (120 p.)
edycja 21 listopada 2017 przez Hackerino

cześć mam problem ze wskażnikami z kursu pana MIROSŁAW ZELENT. to kod

https://gist.github.com/anonymous/7d4dbd4630908bc41eb0cc05998cb69e

I chodzi o to żę program się zamyka z błędem: program przestał działać

jakieś rady

ps. przepraszam ze błedy jestem dyslektykiem i jeszcze klawiature mam zepsutą

1
komentarz 21 listopada 2017 przez RAD Obywatel (1,810 p.)
Wklej ten kod do code snippet, będzie wyglądało ładnie i czytelnie.
komentarz 21 listopada 2017 przez RAD Obywatel (1,810 p.)
Lepiej by nie wcisnąć opcji edytuj pytanie i kod wkleić do tego bloku.
komentarz 21 listopada 2017 przez RAD Obywatel (1,810 p.)
Lepiej ale tak i tak blok jest lepszy zrób to.

1 odpowiedź

+1 głos
odpowiedź 21 listopada 2017 przez obl Maniak (51,280 p.)

Najpierw w pętli for robisz to:

tablica++;

a później próbujesz zwolnić pamięć:

delete [] tablica;

gdzie wskaźnik już nie wskazuje na zaalokowaną wcześniej pamięć operatorem new.

Poza tym nie wiedzę jakiegoś głębszego sensu w tym kodzie.

komentarz 21 listopada 2017 przez Hackerino Nowicjusz (120 p.)
kod ma sens bo jest z kursu MIROSŁA ZELENT i nie sądze żeby tam były błędy.
1
komentarz 21 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Pan Mirosław Zelent nie jest osobą nieomylną, w jego kursie również pojawiają się błędy i niedociągnięcia (niestety dość często, ale nie ma sensu znowu zaczynać tego samego tematu). Nie chcę mu absolutnie niczego zarzucać, tylko pokazać, że jest tylko człowiekiem i że inne osoby niekoniecznie muszą mówić źle.

A kod niech sobie ma sens, jeśli służy celom edukacyjnym. Błędem jest to o czym wspomniał kolega obl, czyli wywołanie delete na wskaźniku, który już nie wskazuje na początek tablicy. Mam więc dla Ciebie dwa rozwiązania:

#include <iostream>
using namespace std;

int ile;

int main()
{
    cout << "Ile liczb w tablicy: ";

    cin>>ile;

    //dynamiczna alokacja tablicy

    int *tablica;
    tablica=new int [ile];
    int *wskaznik = tablica;
    //pokaz kolejne adresy komorek w tablicy

    for (int i=0; i<ile; i++)
    {
        cout<<wskaznik<<endl;
        wskaznik++;
    }


    delete [] tablica;

    tablica=NULL;
    return 0;
}

Czyli dodanie drugiego wskażnika - jego możesz dowolnie przesuwać, natomiast ważne, by sam wskaźnik tablica (wskaźnik na pierwszy element tablicy) dalej wskazywał na to samo, by móc później dokonać dealokacji.

Inny sposób:

#include <iostream>
using namespace std;

int ile;

int main()
{
    cout << "Ile liczb w tablicy: ";

    cin>>ile;

    //dynamiczna alokacja tablicy

    int *tablica;
    tablica=new int [ile];

    //pokaz kolejne adresy komorek w tablicy

    for (int i=0; i<ile; i++)
    {
        cout<<tablica + i<<endl;
    }


    delete [] tablica;

    tablica=NULL;
    return 0;
}

Powinny zadziałać, ale nie testowałem - sprawdź sam. smiley

1
komentarz 21 listopada 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
P.S. W sumie to nie trzeba rzutować wskaźnika na int, nawet lepiej tego nie robić (zależnie od rozmiaru inta na danej platformie i samej architektury, może się pojawić overflow - np. dla inta 32 bitowego i 64 bitowego systemu).

Podobne pytania

0 głosów
2 odpowiedzi 932 wizyt
0 głosów
2 odpowiedzi 964 wizyt
0 głosów
1 odpowiedź 389 wizyt
pytanie zadane 9 września 2017 w C i C++ przez Modferno Początkujący (400 p.)

92,454 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...