006
09.04.2007, 01:18 Uhr
0xdeadbeef
Gott (Operator)
|
Es ist wichtig zu verstehen, dass new[] nur eindimensional alloziiert. Das bedeutet zum Beispiel,
C++: |
int main() { int x = 3, y = 4;
delete[] new int[x][y]; }
|
Ist so nicht möglich, weil y keine Konstante ist. Der Ausdruck
C++: |
int (*a)[5] = new int[x][5];
|
alloziiert ein Array von x Elementen des Typs int[5], d.h. sizeof(*a) == sizeof(int) * 5. Der erstellte Speicherbereich ist flach, wie bei Arrays üblich, und deswegen gibts auch kein delete[][] oder vergleichbares.
Üblicherweise nimmt man in solchen Fällen einen flachen Speicherbereich und macht den Umbruch von Hand, also
C++: |
int dimx = 10, dimy = 20; int x = 2, y = 3;
int *a = new int[dimx * dimy];
a[y * dimx + x] = 3;
|
...oder man macht es halt von Hand. Oder, am besten, man benutzt boost.multi_array. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |