Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Dynamiczna alokacja pamieci

Ostatnio zmodyfikowano 2015-09-17 11:10
Autor Wiadomość
poczben
Temat założony przez niniejszego użytkownika
Dynamiczna alokacja pamieci
» 2015-09-14 12:30:51
Mam pytanie, dlaczego ponizszy kod nie zwraca bledow ? Rezerwuje tablice 10 elementow typu int, a pozniej bez problemu dostaje sie do elementow o indeksach 11 czy 12. Myslalem, ze sa dostepne tylko elementy o indeksach 0 - 9. Kompilator, ktorego uzywam to GNU g++


#include <iostream>
using namespace std;
int main()
{
int *tab;
tab = new int(10);

cout << *tab << endl;
tab[8] = 12;
cout << tab[8] << endl;
tab[11] = 19;
cout << tab[11] << endl;

delete tab;

/*---------------------------------------------*/

int *tab2;
tab2 = new int[10];

cout << *tab2 << endl;
tab2[7] = 11;
cout << tab2[7] << endl;
tab[12] = 114;
cout << tab[12] << endl;

delete tab2;

return 0;
}
P-137504
carlosmay
» 2015-09-14 12:38:52
Bo komórki pamięci poza tablicą nie są nigdzie przydzielone, ale zawierają przypadkowe dane.
P-137505
poczben
Temat założony przez niniejszego użytkownika
» 2015-09-14 12:51:09
ok, ale nastepujacy kod zwrocil juz "segmentation fault" (co ciekawe w dev cpp poszlo bez problemu)


#include <iostream>
using namespace std;

int main()
{
int tab[10] = {2, 45, 23, 2, 11, 7, 9, 87, 0, 4};
tab[11] = 3;

return 0;
}
P-137506
carlosmay
» 2015-09-14 14:03:04
To wszystko zalezy od systemu na jakim pracujesz, od kompilatora, czy dane komórki poza tablicą są używane przez inny program, poza tym tablica dynamiczna jest alokowana w stercie a tablica statyczna w stosie. Możesz sprawdzić adresy tablic dla obu przypadków i porównać. Gdyby pierwszy przypadek dostałem przydział pod tym samym adresem co statyczna to pewnie blad tez byłby ten sam.
P-137507
carlosmay
» 2015-09-14 15:10:23
delete[] tab;
 zwalnianie pamięci alokowanej na tablicę
P-137508
pekfos
» 2015-09-17 11:10:09
dlaczego ponizszy kod nie zwraca bledow ? Rezerwuje tablice 10 elementow typu int, a pozniej bez problemu dostaje sie do elementow o indeksach 11 czy 12.
Bo tak. To może się zachować w dowolny sposób, w tym - bez zgłaszania błędów.
P-137585
« 1 »
  Strona 1 z 1