Je googled, froogled, moogled et doogled :-(interprétation erreur de segmentation gdb
raspian
Si je lance mon programme sous gdb je reçois:
(gdb) run
Starting program: /home/pi/axcept/a
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-
gnueabihf/libthread_db.so.1".
axcept v:1.0 20170710
running
[New Thread 0x768e3450 (LWP 6671)]
[Thread 0x768e3450 (LWP 6671) exited]
*** Error in `/home/pi/axcept/a': double free or corruption (out):
0x00025178 ***
Program received signal SIGABRT, Aborted.
0x76a1af70 in __GI_raise ([email protected]=6) at
../nptl/sysdeps/unix/sysv/linux/raise.c:56
56 ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or
directory.
(gdb) where
#0 0x76a1af70 in __GI_raise ([email protected]=6) at
../nptl/sysdeps/unix/sysv/linux/raise.c:56
#1 0x76a1c324 in __GI_abort() at abort.c:89
#2 0x76a56954 in __libc_message (do_abort=<optimized out>,
fmt=0x76b0c6e8 "*** Error in `%s': %s: 0x%s ***\n") at
../sysdeps/posix/libc_fatal.c:175
#3 0x76a5cb80 in malloc_printerr (action=1, str=0x76b0c860 "double
free or corruption (out)", ptr=<optimized out>) at malloc.c:4996
#4 0x76a5db24 in _int_free (av=<optimized out>, p=<optimized out>,
have_lock=1992996040) at malloc.c:3840
#5 0x76a7d72c in tzset_internal (always=0, explicit=1991424272) at
tzset.c:443
#6 0x76a7db5c in __tz_convert (timer=0x7efff1e0, use_localtime=1,
tp=0x76b2d2cc <_tmbuf>) at tzset.c:632
#7 0x00011190 in get_today() at today.c:17
#8 0x00012f14 in main (argc=1, argv=0x7efff374) at axcept.c:333
(gdb) list
51 in ../nptl/sysdeps/unix/sysv/linux/raise.c
(gdb)
dans axcept.c autour 333 Je:
...
initialise_db();
read_parameters(0);
get_today();
....
mais les deux read_parameters et get_today sont plus ou moins volé de gnu officiel e xamples.
de mon makefile:
CC=gcc
CCFLAGS= -fgnu89-inline -g -v -da -Q -std=c99 -I/usr/local/include -
L/usr/local/lib -lwiringPi -I/usr/include/mysql/ -I/home/pi/logging/
`mysql_config --cflags --libs` -lwiringPi -lwiringPiDev -lpthread -lm
-lcrypt -lrt
J'ai essayé valgrind -v --track-origines = oui myprog, mais il ne me laisse pas plus sage.
Maintenant punch ivre!
double free ou la corruption signifie que vous «libérez quelque chose deux fois, ou que quelque part quelque chose a écrasé la comptabilité en dehors de l'objet' malloc'ated. Le problème peut se manifester plus tard. 'valgrind' devrait être la solution ... –
Mauvais choix d'échantillon de code. Qu'est-ce qui se passe à aujourd'hui.c: 17 semble être plus utile que axcept.c: 333. Je commence toujours à déboguer par l'appel le plus intime que j'ai. – flaviodesousa
Que montre 'valgrind'? – dlmeetei