al ritorno per indirizzo, pretende molto questo andare fuori portata? (SDL)
-
28-09-2019 - |
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.
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.