当通过地址返回时,这是否不超出范围? (SDL)
-
28-09-2019 - |
题
这是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个字节指针变量,它唯一需要保留其价值。
值是地址。该地址是通过手动控制的方式分配的,并且需要调用编译器不知道的调用功能。
其他提示
优化图位于函数的堆栈中,因此在函数返回后它不在范围。它指向的对象是在堆中,因此它保留在那里,直到没有其他指针指的是它为止。
不隶属于 StackOverflow