Ho da tre giorni un problema stranissimo che non riesco a risolvere![]()
Secondo voi al codice all'interno di funzione() cambia qualcosa tra i due pezzetti di codice seguenti? :codice:type VAR; funzione ( & VAR );Certo che no!codice:type * VAR = malloc ( sizeof(type); funzione ( VAR );
Ma invece con un mio programmino sembra proprio di si'![]()
![]()
Ecco il codice:
*Il programma si compila con `gcc -lSDL -lSDL_image -lSDL_gfx -o prova prova.c` ed e' necessario avere installate le SDL, le SDLimage e le SDLgfx.codice:#include <stdio.h> #include <SDL/SDL.h> #include <SDL/SDL_image.h> #include <SDL/SDL_rotozoom.h> #include <stdlib.h> #include <malloc.h> #define IMGS_NUM ( 10 ) typedef struct _SZ_ { SDL_Surface * screen, * imgs [ IMGS_NUM ]; } SZ; SZ * initgame ( SZ * sz ); int main ( ) { SZ * sz = malloc ( sizeof(SZ) ); //SZ sz; initgame ( sz ); //initgame ( & sz ); return 0; } SZ * initgame ( SZ * sz ) { int i; char * imgpath; SDL_Rect src, dest; // Prova ad abilitare le SDL if ( SDL_Init ( SDL_INIT_VIDEO ) < 0 ) { fprintf ( stderr, "Impossibile abilitare le SDL: %s\n", SDL_GetError() ); return NULL; } // Prima di uscire le SDL vengono disabilitate atexit ( SDL_Quit ); // Setto la modalita' video richiesta e controllo se e' stata abilitata if ( ( sz->screen = SDL_SetVideoMode ( 800, 600, 0, SDL_HWSURFACE | SDL_DOUBLEBUF ) ) == NULL ) { fprintf ( stderr, "Imposibile settare la modalita' video: %s\n", SDL_GetError() ); return NULL; } imgpath = (char *) malloc ( 10240 ); // carico tutte le immagini for ( i = 0; i < IMGS_NUM; i ++ ) { sprintf ( imgpath, "imgs/%d.jpg", i+1 ); sz->imgs[i] = IMG_Load ( imgpath ); if ( sz->imgs[i] == NULL ) { printf ( "Non sono riuscito a caricare l'immagine %s.\n", imgpath ); return NULL; } src.w = sz->imgs[i]->w; src.h = sz->imgs[i]->h; dest.x = 0; dest.y = 0; printf ( "Print @ %d, %d: %d, %d\n", dest.x, dest.y, src.w, src.h ); SDL_BlitSurface ( sz->imgs[i], & src, sz->screen, & dest); SDL_UpdateRect ( sz->screen, 0, 0, 0, 0 ); } free ( imgpath ); return sz; }
* E necessario inoltre che nella dir dove si trova l'eseguibile ci sia una sottodir chiamata "imgs" che contenga 10 immagine chiamate "1.jpg", "2.jpg", "3.jpg" ... "10.jpg"
Vedete le quattro linee in grassetto?
Se le invertite (scommentate le due che attualmente sono commmentate e fate l'opposto con le altre due) il programma si comporta in maniera completamente diversa...
Succede che in un caso le immagini vengono stampate nella finestra, mentre nell'altro caso non viene stampato nulla
Perche'???![]()
EDIT: Ho studiato il comportamento del programma con il debugger GDB, e mi sono accorto che e' la SDL_BlitSurface che non fa cio' che dovrebbe...
Pero' il valore che restituisce e' quello che restituisce in caso di successo, ed inoltre a lei cosa cambia di com'e' stato definito sz???![]()

Rispondi quotando

VVoVe: 
) perche' loro non hanno modo di sapere come e' stata dichiarata quella variabile.

