Alokacja dynamicznej tablicy o wymiarach jako zmienne w strukturze

0

Mam problem dotyczący alokacji dynamicznej tablicy.
W strukturze typedef zawarłem deklarację wskaźnika

typedef struct{
int szer;
int wys;
void *tab
}cos;


 

Następnie w pewnej funkcii alokuję pamięć w taki sposób(jej parametrem jest wskaznik do struktury czyli )

 
funkcja(obraz *tam){ ..... 

tam->tab=malloc(tam->szer*tam>wys*sizeof(int));
  int (*piksele)[tam->wys];
  piksele=(int(*)[tam->wys])tam>tab;
} 

Następnie na początku KAZDEJ kolejnej f. zawarłem następujące dwie linijki kodu :

 
  int (*piksele)[tam->wys];
  piksele=(int(*)[tam->wys])tam->tab;
 

Dzięki temu operuję swobodnie na tablicy, odwołując się do jej elementów jako piksele [i][j]=...

Kompilator wywala jednak warningi, wszędzie tam, gdzie zawarte są te dwie linie kodu :

funkc1.c5: warning: ISO C90 forbids variable length array ‘piksele’ [-Wvla]
funkc15: warning: ISO C90 forbids variable length array [-Wvla]

Nie mam pojecia jak to zrobic zeby dlugosc tablicy nie byla zmienną, przeciez jej wymiar ustalam dopiero na pewnym etapie programu.

0
int (*piksele)[tam->wys];

Nie chodzi Tobie przypadkiem o:

 int* piksele = (int*)malloc(xyz);

(+jeżeli jest to tablica 2D, to musisz przeiterować po każdym elemencie i jego też osobno zaalokować).

1
typedef struct { unsigned szer,wys; int *mem,**tab; }obraz;

void funkcja(obraz *tam)
  {
   int *mem=malloc(tam->szer*tam->wys*sizeof(int));
   tam->tab=malloc(tam->wys*sizeof(int*));
   tam->mem=mem;
   for(unsigned i=0;i<tam->wys;++i) tab[i]=mem++;
  }

void freemem(obraz *tam)
  {
   free(tam->tab);
   free(tam->mem);
  }

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