[C][UNIX] shared memory i tablica dwuwymiarowa

0

Witam
Czy może ktoś wie jak stworzyć tablice dwuwymiarową przy użyciu pamięci współdzielonej ? Jedyne co mi przychodzi na myśl to stworzyć tablice jednowymiarową i napisać funkcje która mi zamieni współrzedne 2D na indeks w tablicy. Czy może ktoś wie czy da się to zrobić bardziej elegancko?
Pozdrawiam.

0

e, imho to jest dość eleganckie, statyczne tablice 2D właśnie tak działają, tylko przeliczenia są w tle, przez kompilator robione. Dynamiczne 2D to tablica wskaźników na mniejsze bloki - na chłopski więc rozum możesz spreparować 'udawaną' tablicę 2D, która będzie 'mapowała' współdzielony blok:

#include <stdio.h>

#define TABX 12
#define TABY 6

int main() {
    /* załóżmy, że to twój liniowy współdzielony blok ;) */
    int* block = malloc( TABX*TABY * sizeof(int) );

    /* robisz tablicę wskaźników*/
    int** table = (int**)malloc(TABX*sizeof(int*));
    int i,j;

    /* początek tablicy zawiera wskaźnik na początek bloku
       kolejne elementy tablicy zawierają wskaźnik do kolejnego wiersza
       czyli to tutaj robimy przeliczenie 2d na liniowe
    */
    for(i=0; i<TABX;i++) table[i] = block+ i*TABY;

    /* a tutaj już używasz normalnie, jak w każdej dynamicznej tablicy 2d */
    for(i=0;i<TABX;i++) for(j=0;j<TABY;j++) table[i][j] = (i+1) * (j+1);

    /* dla pewności oglądnijmy liniową zawartość bloku */
    for(i=0;i<TABX*TABY; i++) {
        printf("%4i", block[i]);
        if(i%TABY==TABY-1) printf("\n");
        }
    /* wynik powinien wskazywać, że nasze [x][y] wypełniło blok linowy ładnie */
    return 0;
    }

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