1

这是来自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; 
} 

这里优化图像返回时不应该超出范围吗?看到它是本地的。

4

2 回答 2

2

它确实如此,但不是它指向的分配内存。它只是一个 4 字节的指针变量,唯一需要的是保留它的值。

值是地址。地址是以手动控制的方式分配的,释放它需要调用编译器不知道的函数。

于 2010-06-21T07:25:50.393 回答
0

optimizeImage 在函数的堆栈中,所以函数返回后它会超出范围。它指向的对象在堆中,所以它一直在那里,直到没有其他指针指向它。

于 2010-06-21T07:30:56.723 回答