C"double free or corruption"错误

C "double free or corruption" error

这是短代码,会产生 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);

我不明白,为什么我在先释放之前不能释放第二个表面。

通过 运行 surface = surface2; 语句,您使 surfacesurface2 指针指向相同的内存区域。一旦你释放了它,它就是免费的。尝试再次释放它(通过另一个指针),将尝试释放已经释放的内存,导致此错误。

变量surfacesurface2都指向同一个对象。您实际上释放了同一个对象两次。