Operator new wykorzystywany jest do przydzielania pamięci dla zmiennych zastosowanych w programie. Zmienne te muszą być wskaźnikami. Pamięć jest alokowana na żądanie z dostępnej puli, którą nazywamy stertą. Możemy to rozumieć w ten sposób, że za pomocą operatora new prosimy system operacyjny, aby udostępnił żądaną ilość pamięci, którą chcemy wykorzystać w programie.
Operator delete zwalnia do puli przydzieloną wcześniej pamięć przy pomocy operatora new. Zwolniona pamięć będzie mogła być ponownie wykorzystana.
#include <iostream>
using namespace std;
int main()
{
//przydzielenie pamięci
int *a = new int;
/* lub
int *a;
a = new int;
*/
*a = 3;
cout<<*a; //3
//zwolnienie pamięci
delete a;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int n;
cout<<"Podaj liczbę elementów tablicy tab: ";
cin>>n;
//przydzielenie pamięci na n elementów
int *tab = new int [n];
/* lub
int *tab;
tab = new int [n];
*/
//zwolnienie pamięci
delete [] tab;
return 0;
}
#include <iostream>
using namespace std;
struct struktura{
int a;
struktura *next;
}*current;
int main()
{
//przydzielenie pamięci
current = new struktura;
current->a = 3;
//wyzerowanie wskaźnika
current->next = NULL;
cout<<current->a<<endl; //3
//przydzielenie pamięci
struktura *pom = new struktura;
pom->a = 5;
current->next = pom;
cout<<current->next->a; //5
//zwolnienie pamięci
delete pom;
delete current;
return 0;
}
Zauważ, że po elementach struktury poruszamy się za pomocą operatora "->". Wskaźnik wyzerowujemy, wstawiając wartość NULL.
Stwórz tablicę dwuwymiarową o różnej liczbie elementów w poszczególnych wierszach. Jako ostatnią wartość każdego wiersza wczytaj liczbę 0. Będzie ona wartownikiem.
#include <iostream>
using namespace std;
int main()
{
int n, k, **tab;
cout<<"Podaj liczbę wierszy tablicy dwuwymiarowej: ";
cin>>n;
//przydzielenie pamięci dla n wierszy
tab = new int *[n];
for(int i=0; i<n; i++)
{
cout<<"Podaj liczbę elementów w "<<i+1<<" wierszu: ";
cin>>k;
//przydzielenie pamięci na k elementów i-tego wiersza
tab[i] = new int [k];
cout<<"Wczytaj "<<k<<" elementów do wiersza o indeksie "<<i<<":"endl;
//wczytanie k elementów do i-tego wiersza (ostatnia wartość to 0)
for(int j=0; j<k; j++)
cin>>tab[i][j];
}
//wypisanie elementów dwuwymiarowej tablicy
cout<<"Elementy tablicy dwuwymiarowej:\n";
for(int i=0; i<n; i++)
{
int j = 0;
while(tab[i][j] != 0)
cout<<tab[i][j++]<<' ';
cout<<0<<endl;
}
//zwolnienie pamięci dla elementów poszczególnych wierszy
for(int i=0; i<n; i++)
delete [] tab[i];
//zwolnienie pamięci przydzielonej na wiersze tablicy
delete [] *tab;
return 0;
}
Podaj liczbę wierszy tablicy dwuwymiarowej: 3 Podaj liczbę elementów w 1 wierszu: 5 Wczytaj 5 elementów do wiersza o indeksie 0: 1 2 3 8 0 Podaj liczbę elementów w 2 wierszu: 7 Wczytaj 7 elementów do wiersza o indeksie 1: 8 7 6 9 8 7 0 Podaj liczbę elementów w 3 wierszu: 5 Wczytaj 5 elementów do wiersza o indeksie 2: 1 2 3 4 0 Elementy tablicy dwuwymiarowej: 1 2 3 8 0 8 7 6 9 8 7 0 1 2 3 4 0