这是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个字节指针变量,它唯一需要保留其价值。

值是地址。该地址是通过手动控制的方式分配的,并且需要调用编译器不知道的调用功能。

其他提示

优化图位于函数的堆栈中,因此在函数返回后它不在范围。它指向的对象是在堆中,因此它保留在那里,直到没有其他指针指的是它为止。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top