Witam, napisałem program do zwalniania i alokowania pamięci dla tablicy dwuwymiarowej o wybranym rozmiarze.
Mam jednak pytanie czy jest on napisany poprawnie, sam program oczywiście się kompiluje i wydaje się działać, jednak wskaźniki to dla mnie nowy temat i chciałbym się upewnić.
#include <iostream>
using namespace std;
int **alokacjaPamieci(int wysokosc, int szerokosc)
{
int **tablica = new int*[wysokosc];
for(int i = 0; i < wysokosc; i++)
{
tablica[i] = new int[szerokosc];
}
for(int i = 0; i < wysokosc; i++)
{
for(int j = 0; j < szerokosc; j++)
{
tablica[i][j] = 1;
}
}
return tablica;
}
void wypisz(int **tablica, int wysokosc, int szerokosc)
{
for(int i = 0; i < wysokosc; i++)
{
for(int j = 0; j < szerokosc; j++)
{
cout << tablica[i][j] << " ";
}
cout << endl;
}
}
void zwalnianiePamieci(int **tablica, int wysokosc)
{
for(int i = 0; i < wysokosc; i++)
{
delete []tablica[i];
}
delete []tablica;
}
int main()
{
int **tablica, wysokosc, szerokosc;
cout << "Podaj wysokosc i szerokosc tablicy: ";
cin >> wysokosc >> szerokosc;
//Alokacja pamieci
tablica = alokacjaPamieci(wysokosc, szerokosc);
//Wypisanie tablicy
wypisz(tablica, wysokosc, szerokosc);
cout << tablica[0][0] << endl;
//Zwolnienie pamieci
zwalnianiePamieci(tablica, wysokosc);
tablica[0][0] = 100;
cout << tablica[0][0];
}
Widzę że pomimo tego iż zwolniłem pamięć pod koniec programu, to nadal mogę zmienić wartość w komórce oraz ją wyświetlić. Czy to oznacza że źle zwolniłem pamięć? Zdaje sobie sprawę że powinienem po zwolnieniu pamięci przypisać wskaźnikowi NULL'a, jednak testuje różne opcje.
Mam jeszcze jedno pytanie, mianowicie czy wskaźniki jakie występują w c++ są też w innych językach? Wiem że w niektórych występują ale czy są one podobne czy może ich używanie jest prostsze od tych w c++.