Beispiel Programm, um die malloc-Fehler konsolidieren

Ich testen wollen, die mcheck-Funktionalität auf meinem PC zuerst zu erkennen, die malloc konsolidieren Fehler.
Ich habe auf diese Weise werden Sie sicher, dass dies helfen wird, herauszufinden, einen ähnlichen Absturz auf embedded-linux-box. Leider, der Absturz dauert mindestens 3-4 Tage. So, ich bin auf der Suche nach einem sample-Programm, das zu erzeugen, der eine ähnliche Art von Absturz, wie unten gezeigt.

 Program terminated with signal 6, Aborted.
#0  0x2c73ebb8 in __syscall_kill (pid=900, sig=6) at kill.c:15
15  static inline _syscall2(int, __syscall_kill, __kernel_pid_t, pid,
int, sig);
Current language:  auto; currently c
#0  0x2c73ebb8 in __syscall_kill (pid=900, sig=6) at kill.c:15
    __res = 716485696
    __err = 16
#1  0x2c73eb5c in kill (pid=900, sig=6) at kill.c:19
No locals.
#2  0x2aafb2e0 in pthread_kill (thread=900, signo=6) at signals.c:73
    handle = (pthread_handle) 0x2ab3f2e0
    pid = 900
#3  0x2aafbbb8 in raise (sig=6) at signals.c:241
    retcode = 6
#4  0x2c730a5c in abort () at abort.c:94
    sigset = {__val = {32, 0 <repeats 31 times>}}
#5  0x2c738054 in __malloc_consolidate (av=0x2c798860) at free.c:227
    fb = (mfastbinptr *) 0x2c798864
    maxfb = (mfastbinptr *) 0x2c798880
    p = (mchunkptr) 0x2c798894
    nextp = (mchunkptr) 0x4a2b2948
    unsorted_bin = (mchunkptr) 0x2c798894
    first_unsorted = (mchunkptr) 0x4a22f7e0
    nextchunk = (mchunkptr) 0x2c798894
    size = 0
    nextsize = 0
    prevsize = 0
    nextinuse = 1
    bck = (mchunkptr) 0x4a2b2948
    fwd = (mchunkptr) 0x4a2b2948
#6  0x2c735ff0 in __malloc_inner (bytes=300) at malloc.c:912
    av = (mstate) 0x2c798860
    nb = 304
    idx = 32
    bin = (mbinptr) 0x2ac0dab4
    fb = (mfastbinptr *) 0x2ae11e50
    victim = (mchunkptr) 0x2ac0d9a4
    size = 719396432
    victim_index = 718311332
    remainder = (mchunkptr) 0x49759b58
    remainder_size = 40000
    block = 719396432
    bit = 718500504
    map = 719396432
    fwd = (mchunkptr) 0x1
    bck = (mchunkptr) 0x4a2164ac
    sysmem = (void *) 0x4975c9ac
#7  0x2c736c18 in malloc (bytes=300) at malloc.c:1172
  • Nicht bekommen Sie eine Meldung, die den Fehler beschreibt im detail zusammen mit diesem?
  • Ich habe aktualisiert die gesamte Meldung hier.
  • Möchte nur hinzufügen ein detail, ich bin mit uclibc auf meinem Linux-embedded-box.
  • Sind Sie mit einem normalen Linux-kernel mit MMU aktiviert, oder die no-mmu/uclinux-Sorte, die nicht dynamisch zuordnen Speicher?
  • Es ist ein normales Linux mit MMU aktiviert.
  • Da ich noch nie verwendet uclibc, nach meiner glibc memory/free-debug-Erfahrung, Sie sollten zuerst suchen Sie den Fehlercode, um zu sehen, was genau den Fehler verursacht hat. Bis Sie bekommen, was der Grund ist, Sie bekommen die chance, um den setup-test case.
  • nicht sagen, dass der Versuch der Zuweisung 304 bytes, wenn es nur 300 zur Verfügung?? #6 0x2c735ff0 in __malloc_inner (bytes=300) at malloc.c:912 av = (mstate) 0x2c798860 nb = 304 idx = 32
  • Ja, sieht aus wie mein Programm hat ausgewichen wird mit der malloc-management-Felder.
  • Ich finde es NICHT zu glauben, dass malloc einen Fehler aufweist. Wie einige vorgeschlagen haben, ist Ihr code möglicherweise schädlich sein malloc Kette von kostenlosen Speicher. Oder, am wahrscheinlichsten, Sie sind das mischen von Versionen von malloc und free. Das ist, malloc ist vom liba version1.0 und frei ist von libb version 2.0??

Schreibe einen Kommentar