Zmiana tablicy statycznej na dynamiczna

Odpowiedz Nowy wątek
2014-12-18 16:04
0

Witam chciałbym się dowiedzieć w jaki sposób na tym konkretnym przykładzie zmienić tablice statyczną na dynamiczną.
Mianowicie w pierwszym wierszu jest zadeklarowana tablica statyczna która pobiera z wczytanego PGMa wartość szarości i wymiary. Problem jest taki że czyni to tylko dla zdefiniowanego wcześniej maksymalnego rozmiaru obrazu. Prosiłbym o zmodyfikowanie tego kodu na taki który może pobrać to samo z tym że będzie to zapisane jako tablica dynamiczna. Już w ogóle byłbym bardzo wdzięczny gdyby tą tablicę dynamiczną zapisać jako jakąś prostę strukturę np

typedef struct{
~kod tablicy dynamicznej
}dynamiczny_obraz; 

Kod źródłowy:

#define MAX 512
#define DL_LINII 1024
int czytaj(FILE *plik_we,int obraz_pgm[][MAX],int *wymx,int *wymy, int *szarosci) {
  char buf[DL_LINII];                                                   /* bufor pomocniczy do czytania naglowka i komentarzy */
  int znak;                                                           /* zmienna pomocnicza do czytania komentarzy */
  int koniec=0;                                                         /* czy napotkano koniec danych w pliku */
  int i,j;
 
                                                                          /*Sprawdzenie czy podano prawidłowy uchwyt pliku */
  if (plik_we==NULL) {
    fprintf(stderr,"Blad: Nie podano uchwytu do pliku\n");
    return(0);
  }
 
                                                               /* Sprawdzenie "numeru magicznego" - powinien być P2 */
  if (fgets(buf,DL_LINII,plik_we)==NULL)                       /* Wczytanie pierwszej linii pliku do bufora */
    koniec=1;                                                  /* Nie udalo sie? Koniec danych! */
 
  if ( (buf[0]!='P') || (buf[1]!='2') || koniec) {               /* Czy jest magiczne "P2"? */
    fprintf(stderr,"Blad: To nie jest plik PGM\n");
    return(0);
  }
 
                                                              /* Pominiecie komentarzy */
  do {
    if ((znak=fgetc(plik_we))=='#') {             /* Czy linia rozpoczyna sie od znaku '#'? */
      if (fgets(buf,DL_LINII,plik_we)==NULL)      /* Przeczytaj ja do bufora                */
    koniec=1;                                     /* Zapamietaj ewentualny koniec danych */
    }  else {
      ungetc(znak,plik_we);                   /* Gdy przeczytany znak z poczatku linii */
    }                                         /* nie jest '#' zwroc go                 */
  } while (znak=='#' && !koniec);            /* Powtarzaj dopoki sa linie komentarza */
                                               /* i nie nastapil koniec danych         */
 
  /* Pobranie wymiarow obrazu i liczby odcieni szarosci */
  if (fscanf(plik_we,"%d %d %d",wymx,wymy,szarosci)!=3) {
    fprintf(stderr,"Blad: Brak wymiarow obrazu lub liczby stopni szarosci\n");
    return(0);
  }
  /* Pobranie obrazu i zapisanie w tablicy obraz_pgm*/
  for (i=0;i<*wymy;i++) {
    for (j=0;j<*wymx;j++) {
      if (fscanf(plik_we,"%d",&(obraz_pgm[i][j]))!=1) {
    fprintf(stderr,"Blad: Niewlasciwe wymiary obrazu\n");
    return(0);
      }
    }
  }
  return *wymx**wymy;   /* Czytanie zakonczone sukcesem    */
}                       /* Zwroc liczbe wczytanych pikseli */ 

Pozostało 580 znaków

2014-12-18 16:39
0

mi sie cos wydaje ze tego w ogole nie zrobiles tylko od kogos dostales

uzyj malloc

Pozostało 580 znaków

2014-12-18 17:08
0

Zrobiłem na razie taką strukturę ale ona nie chce działać

#ifndef STRUKTURA_H
#define STRUKTURA_H
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int wym_x, wym_y;
int szarosci;
int (*obrazek)[wym_x];
obrazek = (int(*)[wym_x]) malloc(wym_x*wym_y*sizeof(int));
}t_obraz;
#endif 

Kompilator wybija takie błędy

 struktury.h:8:16: error: ‘wym_x’ undeclared here (not in a function)
 int (*obrazek)[wym_x];
                ^
struktury.h:9:1: error: expected specifier-qualifier-list before ‘obrazek’
 obrazek = (int(*)[wym_x]) malloc(wym_x*wym_y*sizeof(int));
 ^

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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