C SDL双重自由或损坏错误小代码段

C SDL双重自由或损坏错误小代码段,c,linux,sdl,glibc,C,Linux,Sdl,Glibc,我的SDL应用程序偶尔会因为一个非常奇怪的错误而崩溃 glibc正在抱怨一个“双重自由或腐败”错误,并使程序崩溃。我没有任何多线程,并且所讨论的代码只是释放在同一静态函数中分配的一个曲面 在进行对象转储时,我发现崩溃发生在以下代码段中 代码段: static void draw_text_to_screen(const char *text, TTF_Font *text_font, SDL_Color text_color, unsigned int x_offset, unsigne

我的SDL应用程序偶尔会因为一个非常奇怪的错误而崩溃

glibc正在抱怨一个“双重自由或腐败”错误,并使程序崩溃。我没有任何多线程,并且所讨论的代码只是释放在同一静态函数中分配的一个曲面

在进行对象转储时,我发现崩溃发生在以下代码段中

代码段:

static void draw_text_to_screen(const char *text, TTF_Font *text_font,
    SDL_Color text_color, unsigned int x_offset, unsigned int y_offset)
{
    SDL_Rect offset = (SDL_Rect) {x_offset, y_offset, 0, 0};
    SDL_Surface *surface_text =
                    TTF_RenderText_Solid(text_font, text, text_color);
    SDL_BlitSurface(surface_text, NULL, screen, &offset);

    printf("Last thing that is printed\n");
    SDL_FreeSurface(surface_text);
    printf("Not reaching here...\n", surface_text);
}
***glibc检测到***./应用程序:双重释放或损坏(输出):0x0000000002bf82d0*

=========回溯:=========

/lib/x86_64-linux-gnu/libc.so.6(+0x7eb96)[0x7f78a054bb96]

/usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0(SDL_自由曲面+0xdd)[0x7f78a0cdf9dd]

/应用程序[0x4041da]

/应用程序[0x404985]

/应用程序[0x403322]

/应用程序[0x4036a0]

/应用程序[0x401dd9]

/lib/x86_64-linux-gnu/libc.so.6(libc_start_main+0xed)[0x7f78a04ee76d]

/应用程序[0x401f25]

=======内存映射:========

00400000-0040c000 r-xp 00000000 08:05 3805386/home/me/repos/audio/app

0060b000-0060c000 r--p 0000b000 08:05 3805386/home/me/repos/audio/app

0060c000-0060d000 rw-p 0000c000 08:05 3805386/home/me/repos/audio/app

02199000-03307000 rw-p 00000000:00[堆]

7f7899461000-7f7899476000 r-xp 00000000 08:05 3804734/lib/x86_64-linux-gnu/libgcc_s.so.1

7f7899476000-7f7899675000---p 000150008:05 3804734/lib/x86_64-linux-gnu/libgcc_s.so.1

7f7899675000-7f7899676000 r--p 00014000 08:05 3804734/lib/x86_64-linux-gnu/libgcc_s.so.1

7f7899676000-7f7899677000 rw-p 000150008:05 3804734/lib/x86_64-linux-gnu/libgcc_s.so.1

7f7899677000-7f7899ace000 rw-s 00000000:04 229377/SYSV0000000(已删除)

7f7899ace000-7f7899ad3000 r-xp 00000000 08:05 4857142/usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0

7f7899ad3000-7f7899cd2000---p 0000500008:05 4857142/usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0

7f7899cd2000-7f7899cd3000 r--p 0000400008:05 4857142/usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0

7f7899cd3000-7f7899cd4000 rw-p 0000500008:05 4857142/usr/lib/x86_64-linux-gnu/libXfixes.so.3.1.0

7f7899cd4000-7f7899cdd000 r-xp 00000000 08:05 4857160/usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0

7f7899cdd000-7f7899edc000---p 0000900008:05 4857160/usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0

7f7899edc000-7f7899edd000 r--p 00008000 08:05 4857160/usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0

7f7899edd000-7f7899ede000 rw-p 0000900008:05 4857160/usr/lib/x86_64-linux-gnu/libXrender.so.1.3.0

7f7899ede000-7f7899ee7000 r-xp 00000000 08:05 4857134/usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2

7F789EE7000-7f789a0e6000---p 0000900008:05 4857134/usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2

7f789a0e6000-7f789a0e7000 r--p 0000800008:05 4857134/usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2

7f789a0e7000-7f789a0e8000 rw-p 0000900008:05 4857134/usr/lib/x86_64-linux-gnu/libXcursor.so.1.0.2

7f789a0e8000-7f789a7cb000 r--p 00000000 08:05 4856463/usr/lib/locale/locale归档

7f789a7cb000-7f789a7cc000---p 00000000:00

7f789a7cc000-7F789AFCC00 rw-p 00000000:00

7f789afcc000-7f789afe4000 r-xp 00000000 08:05 3801993/lib/x86_64-linux-gnu/libresolv-2.15.so

7f789afe4000-7f789b1e4000---p 000180008:05 3801993/lib/x86_64-linux-gnu/libresolv-2.15.so

7f789b1e4000-7f789b1e5000 r--p 000180008:05 3801993/lib/x86_64-linux-gnu/libresolv-2.15.so

7f789b1e5000-7f789b1e6000 rw-p 00019008:05 3801993/lib/x86_64-linux-gnu/libresolv-2.15.so

7f789b1e6000-7f789b1e8000 rw-p 00000000:00

7f789b1e8000-7f789b1ee000 r-xp 00000000 08:05 4857537/usr/lib/x86_64-linux-gnu/libogg.so.0.7.1

7f789b1ee000-7f789b3ed000---p 0000600008:05 4857537/usr/lib/x86_64-linux-gnu/libogg.so.0.7.1

7f789b3ed000-7f789b3ee000 r--p 0000500008:05 4857537/usr/lib/x86_64-linux-gnu/libogg.so.0.7.1

7f789b3ee000-7f789b3ef000 rw-p 0000600008:05 4857537/usr/lib/x86_64-linux-gnu/libogg.so.0.7.1

7f789b3ef000-7f789b41a000 r-xp 00000000 08:05 4857695/usr/lib/x86_64-linux-gnu/libvorbis.so.0.4.5

7f789b41a000-7f789b619000---p 0002b000 08:05 4857695/usr/lib/x86_64-linux-gnu/libvorbis.so.0.4.5

7f789b619000-7f789b61a000 r--p 0002a000 08:05 4857695/usr/lib/x86_64-linux-gnu/libvorbis.so.0.4.5

7f789b61a000-7f789b61b000 rw-p 0002b000 08:05 4857695/usr/lib/x86_64-linux-gnu/libvorbis.so.0.4.5

7f789b61b000-7f789b8ce000 r-xp 00000000 08:05 4857697/usr/lib/x86_64-linux-gnu/libvorbisenc.so.2.0.8

7f789b8ce000-7f789bacd000---p 002B300008:05 4857697/usr/lib/x86_64-linux-gnu/libvorbisenc.so.2.0.8

7f789bacd000-7f789bae9000 r--p 002B2B2000 08:05 4857697/usr/lib/x86_64-linux-gnu/libvorbisenc.so.2.0.8

7f789bae9000-7f789baea000 rw-p 002CE00008:05 4857697/usr/lib/x86_64-linux-gnu/libvorbisenc.so.2.0.8

7f789baea000-7f789bb32000 r-xp 00000000 08:05 4857070/usr/lib/x86_64-linux-gnu/libFLAC.so.8.2.0

7f789bb32000-7f789bd32000---p 0004800008:05 4857070/usr/lib/x86_64-linux-gnu/libFLAC.so.8.2.0

七,
printf("Last thing that is printed\n");
SDL_FreeSurface(surface_text);
printf("Not reaching here...\n", surface_text);