Dynamiczna alokacja pamieci
Ostatnio zmodyfikowano 2015-09-17 11:10
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; }
|
|
carlosmay |
» 2015-09-14 12:38:52 Bo komórki pamięci poza tablicą nie są nigdzie przydzielone, ale zawierają przypadkowe dane. |
|
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; }
|
|
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. |
|
carlosmay |
» 2015-09-14 15:10:23 delete[] tab; zwalnianie pamięci alokowanej na tablicę |
|
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. |
|
« 1 » |