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

problem ze wskażnikami

0 głosów
82 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,660 p.)
Wklej ten kod do code snippet, będzie wyglądało ładnie i czytelnie.
komentarz 21 listopada 2017 przez RAD Obywatel (1,660 p.)
Lepiej by nie wcisnąć opcji edytuj pytanie i kod wkleić do tego bloku.
komentarz 21 listopada 2017 przez RAD Obywatel (1,660 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 (43,620 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 (145,600 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 (145,600 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 253 wizyt
0 głosów
2 odpowiedzi 209 wizyt
0 głosów
1 odpowiedź 75 wizyt
pytanie zadane 26 lutego 2017 w C i C++ przez Mikusbombro Użytkownik (990 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

54,387 zapytań

98,246 odpowiedzi

202,070 komentarzy

26,700 pasjonatów

Przeglądających: 288
Pasjonatów: 11 Gości: 277

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.

...