История изменений
Исправление Deleted, (текущая версия) :
λ> cat fofofo.c
#include <stdlib.h>
#include <stdio.h>
typedef struct _DATE
{
short year;
char month;
char day;
} DATE, *PDATE;
int main ()
{
PDATE date = calloc(1, sizeof(struct _DATE));
if (NULL == date)
{
return 1;
}
free(date);
free(date);
return 0;
}
λ> gcc -Wall fofofo.c -o fofofo
λ> ./fofofo
*** glibc detected *** ./fofofo: double free or corruption (fasttop): 0x0000000001687010 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x76d76)[0x7f430f1c9d76]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x7f430f1ceb1c]
./fofofo[0x40058d]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xfd)[0x7f430f171ead]
./fofofo[0x400469]
======= Memory map: ========
00400000-00401000 r-xp 00000000 fe:01 412191 /tmp/fofofo
00600000-00601000 rw-p 00000000 fe:01 412191 /tmp/fofofo
01687000-016a8000 rw-p 00000000 00:00 0 [heap]
7f4308000000-7f4308021000 rw-p 00000000 00:00 0
7f4308021000-7f430c000000 ---p 00000000 00:00 0
7f430ef3d000-7f430ef52000 r-xp 00000000 fe:01 1175044 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f430ef52000-7f430f152000 ---p 00015000 fe:01 1175044 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f430f152000-7f430f153000 rw-p 00015000 fe:01 1175044 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f430f153000-7f430f2d5000 r-xp 00000000 fe:01 1175043 /lib/x86_64-linux-gnu/libc-2.13.so
7f430f2d5000-7f430f4d4000 ---p 00182000 fe:01 1175043 /lib/x86_64-linux-gnu/libc-2.13.so
7f430f4d4000-7f430f4d8000 r--p 00181000 fe:01 1175043 /lib/x86_64-linux-gnu/libc-2.13.so
7f430f4d8000-7f430f4d9000 rw-p 00185000 fe:01 1175043 /lib/x86_64-linux-gnu/libc-2.13.so
7f430f4d9000-7f430f4de000 rw-p 00000000 00:00 0
7f430f4de000-7f430f4fe000 r-xp 00000000 fe:01 1175066 /lib/x86_64-linux-gnu/ld-2.13.so
7f430f6d1000-7f430f6d4000 rw-p 00000000 00:00 0
7f430f6fb000-7f430f6fd000 rw-p 00000000 00:00 0
7f430f6fd000-7f430f6fe000 r--p 0001f000 fe:01 1175066 /lib/x86_64-linux-gnu/ld-2.13.so
7f430f6fe000-7f430f6ff000 rw-p 00020000 fe:01 1175066 /lib/x86_64-linux-gnu/ld-2.13.so
7f430f6ff000-7f430f700000 rw-p 00000000 00:00 0
7fff37ed2000-7fff37ef3000 rw-p 00000000 00:00 0 [stack]
7fff37fa0000-7fff37fa2000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
[1] 17049 abort ./fofofo
Такие вещи можно и самому было попробовать и проверить.
Исходная версия Deleted, :
λ> cat fofofo.c
#include <stdlib.h>
#include <stdio.h>
typedef struct _DATE
{
short year;
char month;
char day;
} DATE, *PDATE;
int main ()
{
PDATE date = calloc(1, sizeof(struct _DATE));
if (NULL == date)
{
return 1;
}
free(date);
free(date);
return 0;
}
λ> gcc -Wall fofofo.c -o fofofo
λ> ./fofofo
*** glibc detected *** ./fofofo: double free or corruption (fasttop): 0x0000000001687010 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x76d76)[0x7f430f1c9d76]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x7f430f1ceb1c]
./fofofo[0x40058d]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xfd)[0x7f430f171ead]
./fofofo[0x400469]
======= Memory map: ========
00400000-00401000 r-xp 00000000 fe:01 412191 /tmp/fofofo
00600000-00601000 rw-p 00000000 fe:01 412191 /tmp/fofofo
01687000-016a8000 rw-p 00000000 00:00 0 [heap]
7f4308000000-7f4308021000 rw-p 00000000 00:00 0
7f4308021000-7f430c000000 ---p 00000000 00:00 0
7f430ef3d000-7f430ef52000 r-xp 00000000 fe:01 1175044 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f430ef52000-7f430f152000 ---p 00015000 fe:01 1175044 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f430f152000-7f430f153000 rw-p 00015000 fe:01 1175044 /lib/x86_64-linux-gnu/libgcc_s.so.1
7f430f153000-7f430f2d5000 r-xp 00000000 fe:01 1175043 /lib/x86_64-linux-gnu/libc-2.13.so
7f430f2d5000-7f430f4d4000 ---p 00182000 fe:01 1175043 /lib/x86_64-linux-gnu/libc-2.13.so
7f430f4d4000-7f430f4d8000 r--p 00181000 fe:01 1175043 /lib/x86_64-linux-gnu/libc-2.13.so
7f430f4d8000-7f430f4d9000 rw-p 00185000 fe:01 1175043 /lib/x86_64-linux-gnu/libc-2.13.so
7f430f4d9000-7f430f4de000 rw-p 00000000 00:00 0
7f430f4de000-7f430f4fe000 r-xp 00000000 fe:01 1175066 /lib/x86_64-linux-gnu/ld-2.13.so
7f430f6d1000-7f430f6d4000 rw-p 00000000 00:00 0
7f430f6fb000-7f430f6fd000 rw-p 00000000 00:00 0
7f430f6fd000-7f430f6fe000 r--p 0001f000 fe:01 1175066 /lib/x86_64-linux-gnu/ld-2.13.so
7f430f6fe000-7f430f6ff000 rw-p 00020000 fe:01 1175066 /lib/x86_64-linux-gnu/ld-2.13.so
7f430f6ff000-7f430f700000 rw-p 00000000 00:00 0
7fff37ed2000-7fff37ef3000 rw-p 00000000 00:00 0 [stack]
7fff37fa0000-7fff37fa2000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
[1] 17049 abort ./fofofo
Уж такие вещи можно и самом попробовать и проверить.