dynamiczna alokacja pamięci - tablica trójwymiarowa

0

Witam . Jestem nowy na forum . Piszę program w którym mam problem z deklaracją dynamicznej tablicy trójwymiarowej.
Sprawa wygląda następująco. Mam n pomiarów. Na jeden pomiar składa się tablica wartości x na y . Zarówno n jak i x i y mogą się zmieniać. chciałbym to zapisać do tablicy w następujący sposób : liczba n pomiarów to pierwszy wymiar i jeżeli się do niej odniosę to chciałbym mieć dostęp do każdego x i y w tym n-tym pomiarze. Tak jak mówiłem mam problem jedynie z alkowaniem pamięci. Bardzo proszę o pomoc.

wydaje mi się że w c++ będzie to wyglądało następująco jednak chciałbym mieć to napisane w C :

// tworzymy tablicę wskaźników do n kolejnych "płaszczyzn" tablicy
meas->pomiar = new float** [liczba_pom];
// przydzielamy dla nich pamięć
for ( i = 0; i < liczba_pom; ++i)
{
// alokujemy tablicę na wskaźniki do wierszy
meas->pomiar[i] = new float* [meas->ScatterAzimuth];
// wreszcie, dla przydzielamy pamięć dla właściwych elementów
for ( j = 0; j <meas->ScatterAzimuth; ++j)
meas->pomiar[i][j] = new float [meas->ScatterRadial];
}

1

Na oko:

typedef float* array;
typedef array* array2D;
typedef array2D* array3D;

array3D alloc(int x, int y, int z)
{
    array3D arr = (array3D)malloc(sizeof(array2D)*z);

    for(int i = 0; i < y; i++)
    {
       array2D sub = (array2D)malloc(sizeof(array)*y);

       for(int j = 0; j < x; j++)
       {
           array row = (array)malloc(sizeof(float)*x);
           sub[j] = row;
       }

       arr[i] = sub;
    }

    return arr;
}
1

W C to będzie tak:

typedef float *** Array3d;

Array3d allocate3dArray(size_t planes, size_t rows, size_t cols) {
  Array3d array = (Array3d)malloc(planes * sizeof(float **));
 
  for (size_t p = 0; p < planes; ++p) {
    array[p] = (float **)malloc(rows * sizeof(float *));
 
    for (size_t r = 0; r < rows; ++r) {
      array[p][r] = (float *)malloc(cols * sizeof(float));
    }
  }
 
  return array;
}

Nie zapomnij o odpowiedniej drabince free na koniec.

Edit: Ups, zostałem wyprzedzony.

0

Dzięki wielkie! Pomogło! :))

1 użytkowników online, w tym zalogowanych: 0, gości: 1