010
30.09.2003, 09:27 Uhr
0xdeadbeef
Gott (Operator)
|
Das malloc-**-Konstrukt hat noch den Vorteil, dass du nicht-rechteckige Arrays bauen kannst, was in bestimmten Situationen Speicher spart, und dass du einfach Zeilen vertauschen kannst, was in bestimmten Zusammenhängen (e.g. Matrix-Operationen) Rechenzeit spart.
Im Endeffekt hängt es vom konkreten Problem ab, was gerade sinnvoller ist. Wenn allerdings kein Flaschenhals zu erwarten ist, würde ich persönlich auf die lesbarere Variante setzen und das zweidimensionale malloc vorziehen. Allerdings würde ich das Anfordern und freigeben des Speichers in Subroutinen der Art:
C++: |
typ **malloc_2d_typ_array(size_t x, size_t y) { typ **ret; size_t i; ret = (typ**) malloc(sizeof(typ*) * x); for(i = 0; i < x; ++i) ret[i] = (typ*) malloc(sizeof(typ) * y); return ret; }
void free_2d_typ_array(typ **feld, size_t x) { size_t i; for(i = 0; i < x; ++i) free((void*) feld[i]); free((void*) feld); }
|
ebenfalls aus Gründen der Lesbarkeit. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |