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

Podstawy - wksaźniki. Linux Ubuntu

0 głosów
87 wizyt
pytanie zadane 12 lutego w C i C++ przez Teslum_369 Bywalec (2,930 p.)

Witam,

Zmagam się z pewnym problemem w Linux Ubuntu w aplikacji Xterm.

#include <iostream>

using namespace std;
int ile;

int main()
{
    cout << "Podaj rozmiar tablicy: ";



    cin >> ile;

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

    for(int i=0; i<ile; i++)
    {
        cout << reinterpret_cast<int >(tablica[ile]) << "\n";

        tablica++;
    }

    delete [] tablica;

    return 0;
}

Przerabiam 10 odcinek kursu Pana Mirka, natomiast po wpisaniu dokładnie tego samego kodu, nie mogłem go skompilować, znalazłem podobny temat gdzie wytłumaczono, iż aby zamienić int* na int trzeba użyć reinterpret <int >(adres), zastosowałem takie polecenie i kompilator się uruchomił. Dalszy problem polega na tym, że gdy wpisuję rozmiar tablicy np 10 wyświetla mi tylko pierwszą wartość, potem same 0  a następnie free(): invalid pointer, Aborted (core dumped), co mógłbym zrobić? 

komentarz 12 lutego przez DarthMazut Obywatel (1,600 p.)
Cześć :)

rozumiem, że chcesz przeiterować utworzoną tablicę za pomocą wskaźnika?

Jeśli o to chodzi, to utwórz sobie osobny wskaźnik do tego (np. int* new_wsk), a nie inkrementuj tego, który wskazuje na początek tablicy. Nowy wskaźnik ustaw na początek: new_wsk = &tablica i teraz w pętli wypisz to na co wskaźnik wskazuje: cout << *new_wsk, a po każdej iteracji go inkrementuj new_wsk++.

1 odpowiedź

0 głosów
odpowiedź 12 lutego przez gagyn Mądrala (5,360 p.)

Skopiowałem ten kod co podałeś i działa zarówno z użyciem reinterpret_cast jak i bez, czyli: cout << tablica[0] << "\n"; Jednak w tym przypadku używanie reinterpret_cast nie ma sensu i wystarczy odwołać się normalnie do tablicy.

EDIT: Teraz widzę, że nie możesz odwoływać się za pomocą tablica[ile], tylko tablica[0], ponieważ wykonując tablica++, a następnie odwołując się do ostatniej komórki wychodzisz poza zakres tablicy już w pierwszym przebiegu pętli.

komentarz 12 lutego przez Teslum_369 Bywalec (2,930 p.)

Niestety, u mnie wciąż to samo.

 

komentarz 12 lutego przez gagyn Mądrala (5,360 p.)
Spróbuj skompilować i uruchomić bez delete [] tablica.
komentarz 12 lutego przez Teslum_369 Bywalec (2,930 p.)

Otrzymałem coś takiego:

Tylko teraz dwa pytania,

1) Czy powinienem usunąć "delete [] tablica" ?

2) Nie powinienem ujrzeć jakiegoś adresu komórek?

komentarz 12 lutego przez DarthMazut Obywatel (1,600 p.)
Napotkany problem jest bardzo dobrze wyjaśniony w pierwszej z kolei odpowiedzi pod postem:

https://forum.pasja-informatyki.pl/127590/cr-c-%2310-wskazniki-dynamiczne-alokowanie-pamieci
komentarz 12 lutego przez Teslum_369 Bywalec (2,930 p.)

Wszystko ładnie, tylko spotkał mnie chyba ostatni problem, dlaczego program nie może się skompilować? Otrzymuję taki komunikat:

error: cast from ‘int*’ to ‘int’ loses precision [-fpermissive]|  

O co tu chodzi i jak to naprawić?

komentarz 12 lutego przez gagyn Mądrala (5,360 p.)
Pokaż aktualny kod.

Gdzieś próbujesz potraktować wskaźnik jako wartość zmiennej.
komentarz 13 lutego przez j23 VIP (100,260 p.)

@Karol_Tesla, chodzi o to, że wskaźnik może być większy od typu int, który najczęściej jest 32-bitowy, nawet na platformach 64-bitowych. Użyj typu intptr_t.

Podobne pytania

0 głosów
2 odpowiedzi 100 wizyt
pytanie zadane 12 listopada 2016 w C i C++ przez Hanuku Nowicjusz (140 p.)
+1 głos
2 odpowiedzi 114 wizyt
0 głosów
1 odpowiedź 81 wizyt
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

63,168 zapytań

109,404 odpowiedzi

228,555 komentarzy

42,697 pasjonatów

Przeglądających: 52
Pasjonatów: 3 Gości: 49

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.

...