26. april 2003 - 20:52Der er
7 kommentarer og 2 løsninger
dynamisk allokering af multidimensionel array
Jeg vil gerne lave et array af fat som hver har plads til "bytes_per_sector". Følgende kode virker ikke:
char fat[][] = new char[bootsector.FATs][bytes_per_sector]; delete [][] fat;
Compiler fejl er: main.cpp:58: declaration of `fat' as multidimensional array main.cpp:58: must have bounds for all dimensions except the first main.cpp:58: assignment (not initialization) in declaration
Hvordan allokerer man dynamisk ram til et multidimensional array (og hvordan sletter man det igen) ?
Nu kan jeg se det er en .cpp-fil, så har du overvejet en STL-struktur? Bare så du slipper for hukommelsesstyring selv? Du kunne lave et pair<int, int> af i og j, og så en map<pair<int, int>, char>?
Ja, som oversætteren siger til dig, så skal alle dimensioner (undtagen den første) være kendt på oversættelsestidspunktet. Både min Kernighan & Ritchie samt min Bjarne-bog er på arbejdet, så jeg kan ikke lige slå op og se hvordan du allokerer plads til den første dimension dynamisk.
Men det burde altså være muligt at lave noget i stil med
char fat[][bytes_per_sector] = // Og så er det jeg ikke har mine bøger
int main() { int n = 2; int m = 3; int *a = new int[n*m]; init1(a,n,m); show1(a,n,m); int **b = new (int *)[n]; for(int i=0; i<n; i++) b[i]=new int[m]; init2(b,n,m); show2(b,n,m); twodim *c = new twodim[2]; init3(*c,n,m); show3(*c,n,m); }
Så altså enten #1 (endimensionelt array med beregning af index - ligesom olennart foreslog) eller #2 (array af arrays - som altså ikke er det samme som et todimensionelt array, men som i nogen tilfælde kan bruges).
Jeg prøvede iøvrigt om jeg kunne compile #3 med andet end GCC - uden held så muligvis er den ikke standard compliant.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.