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

Dynamiczna tablica dwuwymiarowa i wskaźniki

Object Storage Arubacloud
0 głosów
555 wizyt
pytanie zadane 21 października 2017 w C i C++ przez Daaa22 Dyskutant (8,250 p.)

Powiedzmy że mamy tablicę 2-wymiarową "int **tab",  oraz funkcje która bierze tę tablicę i ją wypełnia. Napisałem kod który teoretycznie powinien działać, ale no... Błędu nie widzę

#include <iostream>

using namespace std;

void fnc( int *** tab )
{
    *tab = new int*[8];
    for( int i = 0; i < 8; i++ )
        *tab[i] = new int[8];
    return;
}

int main()
{
    int **dynamiczna_tablica_2_wymiarowa;
    fnc(&dynamiczna_tablica_2_wymiarowa);

    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 21 października 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
wybrane 21 października 2017 przez Daaa22
 
Najlepsza

Robisz dereferencję na wskaźniku, który nie wskazuje na nic.

Popraw:

*tab[i] = new int[8];

Na:

(*tab)[i] = new int[8];

 

komentarz 21 października 2017 przez Daaa22 Dyskutant (8,250 p.)
A "*tab" nie wskazuje na "dynamiczna_tablica_2_wymiarowa"?

Można to jakoś naprawić? XD
komentarz 21 października 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
A nie czekaj, chyba źle ci powiedziałem. Poczekaj, sprawdzę.
komentarz 21 października 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)
edycja 21 października 2017 przez Eryk Andrzejewski

Okej, wszystko jasne.

Nie działa, bo operator [] ma większy priorytet niż * wink

Popraw na:

(*tab)[i] = new int [8];

I wszystko powinno już działać.

Wybacz, że początkowo trochę namieszałem w głowie wink

*tab[i] to wskaźnik na tab[i]. A ty chcesz odwołać się do i-tego elementu *tab.

Tak przy okazji, to sugeruję:

  1. Nie używać dyrektywy using (using namespace...), a już na pewno nie robić tego globalnie.
  2. Nie musisz używać return; na końcu funkcji, ona i tak zakończy swoje działanie.
  3. Nie musisz używać return 0; na końcu maina (ale tylko na końcu maina!)
  4. Nie używaj "gołych" new/delete. W zamian za to:
    • Ogarnij smart pointery
    • Użyj gotowych kontenerów z STL, np. std::vector, std::array - są bardzo wygodne w użyciu smiley

Podobne pytania

0 głosów
2 odpowiedzi 8,057 wizyt
pytanie zadane 6 stycznia 2017 w C i C++ przez Astenna Początkujący (340 p.)
0 głosów
0 odpowiedzi 127 wizyt
pytanie zadane 28 stycznia 2022 w C i C++ przez danielch Użytkownik (660 p.)
0 głosów
1 odpowiedź 209 wizyt
pytanie zadane 19 kwietnia 2020 w C i C++ przez julsonem Nowicjusz (120 p.)

92,634 zapytań

141,505 odpowiedzi

319,883 komentarzy

62,015 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...