при возврате по адресу разве это не выходит за рамки? (SDL) - PullRequest
1 голос
/ 21 июня 2010

это пример кода из учебных пособий lazyfoo по SDL.

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; 
} 

Здесь не должно ли optimizedImage выйти из области видимости после его возвращения?видя как оно местное.

Ответы [ 2 ]

2 голосов
/ 21 июня 2010

Да, но не выделенная память.Это всего лишь 4-байтовая переменная-указатель, единственное, что от нее требуется, это сохранить ее значение.

Значение - это адрес.Адрес - это что-то, выделенное вручную, и для его освобождения требуются вызывающие функции, о которых компилятор не знает.

0 голосов
/ 21 июня 2010

optimizedImage находится в стеке функции, поэтому он выходит из области видимости после завершения функции.Объект, на который он указывает, находится в куче, поэтому он остается там, пока на него не ссылается никакой другой указатель.

...