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

Dynamiczne dwuwymiarowe tablice

Object Storage Arubacloud
0 głosów
730 wizyt
pytanie zadane 2 marca 2017 w C i C++ przez Mateusz Ścigała Początkujący (280 p.)
#include <iostream>
using namespace std;
int main()
{
    int n=0, m=0;
    const int x=2;
    int ** tablica= new int*[x];
        cout<<"Podaj m: ";
        cin>>m;
        cout<<"Podaj n: ";
        cin>>n;
    tablica[0]=new int[m];
    tablica[1]=new int[n];
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<"Tablica["<<i<<"]["<<j<<"]=";
            cin>>tablica[i][j];
        }
    }
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<tablica[i][j]<<"\t";
        }
        cout<<endl;
    }
    delete [] tablica[0];
    delete [] tablica[1];
    delete [] tablica;
    return 0;
}

Witam. Mój program w założeniu miał wypisywać macierz, a wartości w niej zawarte użytkownik może wpisać. Dlaczego w kodzie nie moge wpisać wartości do macierzy większej niz 2x2? Przy założeniu m=2 i n=2 program działa, ale gdy zwiększam liczbę wierszy, tzn. m=3, n=3 to niestety program się wysypuje, a ma to miejsce gdy program przechodzi do 3 wiersza. Co dziwne, gdy wartość m=2 a n=5 lub n=10 to spokojnie program działa. Mógłby mnie ktoś poratować podpowiedzią co jest nie tak w tym kodzie? Pozdrawiam i dziękuje z góry :)

2 odpowiedzi

+1 głos
odpowiedź 2 marca 2017 przez niezalogowany
edycja 2 marca 2017

 Zrób tak:

#include <iostream>
using namespace std;
int main()
{
    int n=0, m=0;

        cout<<"Podaj m: ";
        cin>>m;
        cout<<"Podaj n: ";
        cin>>n;

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

    for(int i=0; i<m; i++)
    {
        tablica[i] = new int[n];
        for(int j=0; j<n; j++)
        {
            cout<<"Tablica["<<i<<"]["<<j<<"]=";
            cin>>tablica[i][j];
        }
    }
    for(int i=0; i<m; i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<tablica[i][j]<<"\t";
        }
        cout<<endl;
    }
    for(int i=0; i<m; i++) delete [] tablica[i];
    delete [] tablica;
    return 0;
}

Jest to poprawne tworzenie dwuwymiarowej tablicy.

komentarz 2 marca 2017 przez tangarr Mędrzec (154,860 p.)
Zapomniałeś poprawić kodu dotyczącego czyszczenia pamięci. Przy m = 1 program wycrashuje, a przy m>2 będziesz miał wyciek pamięci
komentarz 2 marca 2017 przez niezalogowany
Czyszczenie pamięci poprawiłem w momencie gdy napisałeś swoją odpowiedź.
+1 głos
odpowiedź 2 marca 2017 przez tangarr Mędrzec (154,860 p.)

W tym kodzie tworzysz dwie niezależne tablice jednowymiarowe i umieszczasz je w dwuelementowej tablicy.
 

Aby utworzyć macierz musisz utworzyć m-elementową tablicę tablic, a następnie w każdej komórce tej tablicy utworzyć tablicę n-elementową.
 

tablica = new int*[m];
for (int i=0; i<m; i++)
   tablica[i] = new int[n];

Nie zapomnij zwolnić całej pamięci po zakończeniu zabawy z macierzą

Podobne pytania

0 głosów
2 odpowiedzi 4,106 wizyt
pytanie zadane 20 sierpnia 2015 w C i C++ przez 0xf Dyskutant (8,180 p.)
0 głosów
0 odpowiedzi 292 wizyt
pytanie zadane 10 grudnia 2016 w C i C++ przez jeżuś Nowicjusz (200 p.)
+1 głos
1 odpowiedź 265 wizyt
pytanie zadane 13 marca 2021 w C i C++ przez bultok0 Nowicjusz (130 p.)

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 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!

...