quatromen Temat założony przez niniejszego użytkownika |
[C]error: ‘obraz’ has no member named ‘obraz_pgm’ » 2013-12-27 11:12:54 Mam problem z programem otóż jak chcem zwolnic pamiec to wykakuje mi błąd podczas kompilacji: Testfree.c: In function ‘zapisz’: Testfree.c:37:11: error: ‘obraz’ has no member named ‘obraz_pgm’
Kod: #include<stdio.h> #include<string.h> #include<stdlib.h>
#define DL_LINII 200
typedef struct { int wymx; int wymy; int szarosci; void * obraz_p; } obraz;
void zapisz( FILE * zapis, obraz * wobr ) { int i, j; int( * obraz_pgm )[ wobr->wymx ]; obraz_pgm =( int( * )[ wobr->wymx ] ) wobr->obraz_p; fprintf( zapis, "P2 \n %d %d \n %d", wobr->wymx, wobr->wymy, wobr->szarosci ); for( i = 0; i < wobr->wymy; i++ ) { fprintf( zapis, "\n" ); for( j = 0; j < wobr->wymx; j++ ) { fprintf( zapis, "%d ", obraz_pgm[ i ][ j ] ); } } free( wobr->obraz_pgm ); }
int czytaj( FILE * p, obraz * wobr ) { char s[ DL_LINII ]; int znak, koniec = 0, i, j; if( p == NULL ) { fprintf( stderr, "Blad: Nie podano uchwytu do pliku\n" ); return( 0 ); } if( fgets( s, DL_LINII, p ) == NULL ) koniec = 1; if(( s[ 0 ] != 'P' ) ||( s[ 1 ] != '2' ) || koniec ) { fprintf( stderr, "Blad: To nie jest plik PGM\n" ); return( 0 ); } do { if(( znak = fgetc( p ) ) == '#' ) { if( fgets( s, DL_LINII, p ) == NULL ) koniec = 1; } else { ungetc( znak, p ); } } while( !koniec && znak == '#' ); if( fscanf( p, "%d %d %d", & wobr->wymx, & wobr->wymy, & wobr->szarosci ) != 3 ) { fprintf( stderr, "Blad: Brak wymiarow obrazu lub liczby stopni szarosci\n" ); return( 0 ); } wobr->obraz_p = malloc( wobr->wymx * wobr->wymy * sizeof( int ) ); int( * obraz_pgm )[ wobr->wymx ]; obraz_pgm =( int( * )[ wobr->wymx ] ) wobr->obraz_p; for( i = 0; i < wobr->wymy; i++ ) { for( j = 0; j < wobr->wymx; j++ ) { if( fscanf( p, "%d", &( obraz_pgm[ i ][ j ] ) ) != 1 ) { fprintf( stderr, "Blad: Niewlasciwe wymiary obrazu\n" ); return( 0 ); } } } return( 0 ); }
void wyswietl( char * n_pliku ) { char polecenie[ 1024 ]; strcpy( polecenie, "display " ); strcat( polecenie, n_pliku ); strcat( polecenie, " &" ); printf( "%s\n", polecenie ); system( polecenie ); }
int main() { obraz obr; int odczytano = 0; FILE * plik; FILE * zapis; char nazwa[ 100 ]; char nazwazapis[ 100 ]; printf( "Podaj nazwe pliku:\n" ); scanf( "%s", nazwa ); plik = fopen( nazwa, "r" ); if( plik != NULL ) odczytano = czytaj( plik, & obr ); printf( " podaj nazwe pliku do zapisania : \n " ); scanf( "%s", nazwazapis ); zapis = fopen( nazwazapis, "w" ); zapisz( zapis, & obr ); return odczytano; }
Prosze o pomoc z góry dzieki :) |
|
pekfos |
» 2013-12-27 11:18:45 Co w tym dziwnego? Na prawdę nie masz, w strukturze obraz, składowej obraz_pgm. |
|
quatromen Temat założony przez niniejszego użytkownika |
» 2013-12-27 11:22:17 Aj z tego wszystkiego za dużo napisałem i dlatego był błąd podczas kompilacji :) , zamiast : powinno być : Ale czy to będzie poprawnie zwalniać cala pamięć ?? ?? ?? |
|
pekfos |
» 2013-12-27 11:36:33 Same zwalnianie jest tu poprawne. Problem został rozwiązany, temat powinien być zamknięty. |
|
quatromen Temat założony przez niniejszego użytkownika |
» 2013-12-27 11:41:11 dzieks :) więc zamykam :) |
|
« 1 » |