• 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

VPS Starter Arubacloud
0 głosów
551 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 7,980 wizyt
pytanie zadane 6 stycznia 2017 w C i C++ przez Astenna Początkujący (340 p.)
0 głosów
0 odpowiedzi 123 wizyt
pytanie zadane 28 stycznia 2022 w C i C++ przez danielch Użytkownik (660 p.)
0 głosów
1 odpowiedź 203 wizyt
pytanie zadane 19 kwietnia 2020 w C i C++ przez julsonem Nowicjusz (120 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 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!

...