Domanda

Questo è un esempio di codice dal tutorial SDL di lazyfoo.

SDL_Surface *load_image( std::string filename ) { 

//Temporary storage for the image that's loaded 
SDL_Surface* loadedImage = NULL; 
//The optimized image that will be used 
SDL_Surface* optimizedImage = NULL; 

//Load the image 
loadedImage = SDL_LoadBMP( filename.c_str() ); 


//If nothing went wrong in loading the image 
if( loadedImage != NULL ) { 
    //Create an optimized image 
    optimizedImage = SDL_DisplayFormat( loadedImage ); 
    //Free the old image 
    SDL_FreeSurface( loadedImage ); 
} 

//Return the optimized image 
return optimizedImage; 
} 

Qui non dovrebbe optimizedImage andare fuori del campo di applicazione quando ritorna? visto che è locale.

È stato utile?

Soluzione

Lo fa, ma non la memoria allocata puntato da esso. Si tratta di una variabile puntatore solo 4 byte, l'unica cosa necessaria da esso è quello di mantenere il suo valore.

Il valore è l'indirizzo. L'indirizzo è qualcosa assegnato in modo controllato manualmente e deallocando richiede funzioni di chiamare il compilatore non sa nulla.

Altri suggerimenti

optimizedImage è nella pila della funzione, così si va fuori del campo di applicazione, dopo la funzione ritorna. L'oggetto a cui punta è in mucchio, così rimane lì finché nessun altro puntatore si riferisce ad esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top