102 Stimmen

Fehler: free(): ungültige nächste Größe (schnell):

Welchen merkwürdigen Fehler erhalte ich? Ich kompiliere C++ unter Verwendung von g++ auf Ubuntu 10.10. Es tritt sporadisch auf, wenn ich die ausführbare Datei starte (vielleicht 2 Mal in 8 Stunden, bei 10 Kompilierungen pro Stunde). Jedoch verschwindet es meistens, wenn ich sauber mache und neu kompiliere.

*** glibc detected *** ./emailQueue.app: free(): invalid next size (fast): 0x0000000001c40270 ***
======= Stacktrace: =========
/lib/libc.so.6(+0x774b6)[0x7f490d95e4b6]
/lib/libc.so.6(cfree+0x73)[0x7f490d964c83]
./emailQueue.app[0x401f47]
/lib/libc.so.6(__libc_start_main+0xfe)[0x7f490d905d8e]
./emailQueue.app[0x401cc9]
======= Speicherkarte: ========
00400000-0040d000 r-xp 00000000 08:01 1311132                            /home/server/Projects/email/emailQueue.app
0060d000-0060e000 r--p 0000d000 08:01 1311132                            /home/server/Projects/email/emailQueue.app
0060e000-0060f000 rw-p 0000e000 08:01 1311132                            /home/server/Projects/email/emailQueue.app
01c40000-01c82000 rw-p 00000000 00:00 0                                  [heap]
7f4908000000-7f4908021000 rw-p 00000000 00:00 0 
7f4908021000-7f490c000000 ---p 00000000 00:00 0 
7f490ce52000-7f490ce5e000 r-xp 00000000 08:01 1051251                    /lib/libnss_files-2.12.1.so
7f490ce5e000-7f490d05d000 ---p 0000c000 08:01 1051251                    /lib/libnss_files-2.12.1.so
7f490d05d000-7f490d05e000 r--p 0000b000 08:01 1051251                    /lib/libnss_files-2.12.1.so
7f490d05e000-7f490d05f000 rw-p 0000c000 08:01 1051251                    /lib/libnss_files-2.12.1.so
... [Remaining content has been translated] ...
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Aborted

1voto

Arkantos Punkte 11

Ich bin auf einen ähnlichen Fehler gestoßen. Es war ein Anfängerfehler, der in Eile gemacht wurde. Integer-Array ohne Größe zu deklarieren int a[] und dann darauf zugreifen. Der C++-Compiler sollte einen solchen Fehler problemlos erkennen, wenn er sich im Hauptteil befindet. Da dieses spezielle int-Array jedoch innerhalb eines Objekts deklariert wurde, wurde es zur gleichen Zeit wie mein Objekt erstellt (viele Objekte wurden erstellt), und der Compiler warf einen free(): invalid next size(normal) Fehler. Ich habe mir 2 Erklärungen dafür überlegt (bitte klären Sie mich auf, wenn jemand mehr weiß): 1.) Dies führte dazu, dass ihm irgendwelcher zufälliger Speicher zugewiesen wurde, aber da darauf nicht zugegriffen werden konnte, wurde ständig der gesamte andere Heapspeicher freigegeben, nur um dieses int zu finden. 2.) Der von ihm benötigte Speicher war praktisch unendlich für ein Programm, und um dies zuzuweisen, wurde ständig der gesamte andere Speicher freigegeben.

Ein einfaches:

    int* a;
    class foo{ 
    foo(){
       for(i=0;i

`

Hat das Problem gelöst. Aber es hat viel Zeit gekostet, dieses Problem zu debuggen, denn der Compiler konnte den Fehler nicht "wirklich" finden.

`

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X