2010-06-21 1 views
1

Это пример кода из учебных пособий lazyfoo SDL.при возврате по адресу, разве это не выходит за рамки? (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; 
} 

Здесь не должно быть оптимизировано. Исключение выходит из сферы действия, когда оно возвращается? видя, что он локальный.

ответ

2

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

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

0

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

Смежные вопросы