Program received signal SIGSEGV, Segmentation fault (das Programm läuft von Stapel.)

Bekomme ich diese Fehlermeldung wenn ich das Programm mit gdb. Der Fehler erscheint in dieser Zeile:

long a = thread_fake(); //in file1.c

War ich immer das problem mit der anderen Funktion definiert wurde, in einer separaten Datei, also habe ich es vereinfacht, um eine einfache Funktion, die nur 0 zurück.
Die Funktion wurde definiert als:

long thread_fake(){ //defined in file2.c
    return 0;
}

Als @EmployedRussian darauf hingewiesen, es scheint, das Programm läuft von Stapel. Valgrind zeigt die folgenden Fehler:

==14711== 144 bytes in 1 blocks are possibly lost in loss record 17 of 32
==14711==    at 0x4025315: calloc (vg_replace_malloc.c:467)
==14711==    by 0x4010CD7: allocate_dtv (dl-tls.c:300)
==14711==    by 0x401146B: _dl_allocate_tls (dl-tls.c:464)
==14711==    by 0x40475C6: pthread_create@@GLIBC_2.1 (allocatestack.c:570)
==14711==    by 0x8050583: tm_main_startup 
==14711==    by 0x8048F6B: main (genome.c:201)
==14711== 144 bytes in 1 blocks are possibly lost in loss record 18 of 32
==14711==    at 0x4025315: calloc (vg_replace_malloc.c:467)
==14711==    by 0x4010CD7: allocate_dtv (dl-tls.c:300)
==14711==    by 0x401146B: _dl_allocate_tls (dl-tls.c:464)
==14711==    by 0x40475C6: pthread_create@@GLIBC_2.1 (allocatestack.c:570)
==14711==    by 0x804DFE3: thread_startup (thread.c:151)
==14711==    by 0x8048F73: main (genome.c:203)

Alle threads erstellt werden, Schloss sich einer entsprechenden pthread_join aufrufen. Auch habe ich versucht die sgcheck-tool, aber es funktioniert nicht auf der Plattform'x86-linux'. Bitte helfen Sie.

Die komplette Ausgabe von Befehl bt:

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x406e8b70 (LWP 19416)]
sequencer_run (argPtr=0x89fce00) at sequencer.c:251
251 a = thread_fake();
(gdb) bt
#0  sequencer_run (argPtr=0x89fce00) at sequencer.c:251
#1  0x0804e306 in threadWait (argPtr=0x89dc1f4) at ../lib/thread.c:105
#2  0x4003be99 in start_thread (arg=0x406e8b70) at pthread_create.c:304
#3  0x40253cbe in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130
  • Versucht valgrind?
  • Haben Sie die Funktion deklariert, die in Datei1.c oder in einer header-Datei enthalten ist es?
  • in einer header-Datei Datei2.h enthalten ist, die von Datei1.c
  • linker-Warnungen?
  • Nein..
  • Kein repro und nichts, was ich sofort sehen, es sei denn, Sie vergessen, um die Funktion zu deklarieren. Es ist etwas, das man weglassen. Schalten Sie alle Warnungen (gcc -Wall -Wextra -pedantic) und zeigen uns die ganze Befehlszeile, die Sie verwenden für die Zusammenstellung.
  • Nein.Kein linker-Warnungen..
  • Sie schreiben, dass Sie diese Fehlermeldung erhalten, wenn das Programm läuft mit gdb. Tritt es auf, wenn Sie es außerhalb der gdb?
  • Post der kürzeste, vollständige kompilierbare Beispiel, dass Sie, die den Fehler reproduziert.
  • Klingt wie könnte ein stack - /memory-Korruption Problem zu beheben, wenn das problem sich bewegt...

InformationsquelleAutor ceedee | 2013-09-11
Schreibe einen Kommentar