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

problem ze wskażnikami

Ultraszybki serwer VPS NVMe BIZNES
0 głosów
74 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,470 p.)
Wklej ten kod do code snippet, będzie wyglądało ładnie i czytelnie.
komentarz 21 listopada 2017 przez RAD Obywatel (1,470 p.)
Lepiej by nie wcisnąć opcji edytuj pytanie i kod wkleić do tego bloku.
komentarz 21 listopada 2017 przez RAD Obywatel (1,470 p.)
Lepiej ale tak i tak blok jest lepszy zrób to.

1 odpowiedź

+1 głos
odpowiedź 21 listopada 2017 przez obl Nałogowiec (42,190 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 VIP (128,360 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 VIP (128,360 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 187 wizyt
0 głosów
1 odpowiedź 108 wizyt
0 głosów
1 odpowiedź 67 wizyt
pytanie zadane 26 lutego 2017 w C i C++ przez Mikusbombro Użytkownik (910 p.)
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze).
Ciekawy innych porad? Odwiedź tę stronę!

44,251 zapytań

84,047 odpowiedzi

167,336 komentarzy

21,161 pasjonatów

Przeglądających: 182
Pasjonatów: 7 Gości: 175

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...