C"双重免费或损坏"错误

Dav*_*vey 1 c memory free allocation corruption

这是产生double free or corruption错误的短代码.

SDL_Surface *surface;
SDL_Surface *surface2;
surface = NULL;
surface2 = SDL_LoadBMP("someImg.bmp");
surface = surface2;
SDL_FreeSurface(surface);
SDL_FreeSurface(surface2);
Run Code Online (Sandbox Code Playgroud)

我不明白,为什么我先解放前不能释放第二面.

chq*_*lie 7

这两个变量surface,并surface2指向同一个对象.您实际上可以释放两次相同的对象.

  • @Davey:分配时,根本不复制*内容*.由于`SDL_Surface`是SDL库的一种类型,并且有一个内部结构的链接,你不能自己复制它,但是你可以用`SDL_CreateRGBSurface()`创建一个新的匹配表面,并用`SDL_BlitSurface复制那里的数据. ()`. (2认同)