Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

SIGSEGV. 0x408ec247 in _int_malloc () from /lib/libc.so.6

8 réponses
Avatar
Celer
Bonsoir,

Voudriez-vous bien examiner le problème qui a interrompu et bloque le
développement de mon programme depuis plusieurs jours. Le module qui
déclenche le phénomène a été testé isolément sans problème. Mais une fois
intégré au reste ~^~
\|/
Résumé : .
======
A son nème appel à malloc() mon programme reçoit une erreur de segmentation
(signal 11 - SIGSEGV), comme s'il avait tenté d'accéder à une adresse
mémoire invalide. Que peut-on faire au niveau application pour y remédier ?
Contexte :
========
OS Linux Slackware 11.0
glibc-2.3.6-i486-6
Linux version 2.4.33.3 (gcc version 3.4.6) #2 Mon Oct 16 10:22:51 CEST 2006
127MB HIGHMEM available.
896MB LOWMEM available.
On node 0 totalpages: 262064
zone(0): 4096 pages.
zone(1): 225280 pages.
zone(2): 32688 pages.

Traces :
======
:
:
:
Erreur de segmentation (core dumped)
bash-3.1$ gdb celer core
GNU gdb 6.5
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i486-slackware-linux"...Using host libthread_db
library "/lib/libthread_db.so.1".

Reading symbols from /usr/lib/libglade-2.0.so.0...done.
Loaded symbols for /usr/lib/libglade-2.0.so.0
:
:
:
Core was generated by `celer -o dirctvt'.
Program terminated with signal 11, Segmentation fault.
#0 0x408ec247 in _int_malloc () from /lib/libc.so.6
(gdb) where
#0 0x408ec247 in _int_malloc () from /lib/libc.so.6
#1 0x408ee2f1 in malloc () from /lib/libc.so.6
#2 0x08050bda in graphasci_instance (nlignes=32, ncolonnes=64, mgauche=5,
mdroite=0, mbasse=1, mhaute=1) at graphasci.c:182
#3 0x0804bbf9 in main (argc=3, argv=0xbffff3f4) at main.c:348
(gdb)

Code condensé et simplifié :
==========================
struct objet
{
unsigned nlignes;
unsigned ncolonnes;
char * titre;
unsigned mgauche;
unsigned mdroite;
unsigned mhaute;
unsigned mbasse;
float vcal;
float hcal;
float * pdata;
char ** tabGraph;
};

struct objet * cet_objet = NULL;
unsigned taille_objet = sizeof(struct objet);
if ((cet_objet = malloc (taille_objet)) == NULL) ... ;
:
:
:
free (cet_objet);
cet_objet = NULL;

8 réponses

Avatar
Harpo
Celer wrote:

Code condensé et simplifié :


Comment voulez-vous qu'on voit à partir d'un code qui n'est pas celui
qui plante ?
faites un code minimal qui compile et qui plante, si vous n'avez pas
trouvé l'erreur en le faisant, postez le ici s'il ne fait pas plus
d'une centaine de lignes.

========================= > struct objet
{
unsigned nlignes;
unsigned ncolonnes;
char * titre;
unsigned mgauche;
unsigned mdroite;
unsigned mhaute;
unsigned mbasse;
float vcal;
float hcal;
float * pdata;
char ** tabGraph;
};

struct objet * cet_objet = NULL;
unsigned taille_objet = sizeof(struct objet);
if ((cet_objet = malloc (taille_objet)) == NULL) ... ;


titre, pdata, tabGraph et ce sur quoi elle pointe sont-ils alloués ? Si
ca plante dans malloc(), c'est assez probablement un débordement d'une
zone allouée.

--
http://patrick.davalan.free.fr/

Avatar
Harpo
Celer wrote:

Bonsoir,

Voudriez-vous bien examiner le problème qui a interrompu et bloque le
développement de mon programme depuis plusieurs jours. Le module qui
déclenche le phénomène a été testé isolément sans problème. Mais une
fois
intégré au reste ~^~


Il n'y a aucune raison particulière que ce soit ce module qui soit la
cause de l'erreur.
Utilisez un truc comme electric-fence pour voir quand il y a un
débordement.

--
http://patrick.davalan.free.fr/

Avatar
Celer
Harpo wrote:
Merci pour les deux messages.
Celer wrote:

Code condensé et simplifié :


Comment voulez-vous qu'on voit à partir d'un code qui n'est pas celui
qui plante ?


C'est évidemment un code minimal QUI PLANTE AUSSI
(dans le même contexte of course)

faites un code minimal qui compile et qui plante, si vous n'avez pas
trouvé l'erreur en le faisant, postez le ici s'il ne fait pas plus
d'une centaine de lignes.

========================= >> struct objet
{
unsigned nlignes;
unsigned ncolonnes;
char * titre;
unsigned mgauche;
unsigned mdroite;
unsigned mhaute;
unsigned mbasse;
float vcal;
float hcal;
float * pdata;
char ** tabGraph;
};

struct objet * cet_objet = NULL;
unsigned taille_objet = sizeof(struct objet);
if ((cet_objet = malloc (taille_objet)) == NULL) ... ;


titre, pdata, tabGraph et ce sur quoi elle pointe sont-ils alloués ?
Pourquoi seraient-ils alloués tant qu'on ne les utilise pas ? sizeof()

connait la taille d'un poiteur sur un flottant, un pointeur de char, ou
tout autre type. Non ?
Si
ca plante dans malloc(), c'est assez probablement un débordement d'une
zone allouée.
Sans doute mais par qui pourquoi, c'est la question.

J'ai à peu prés 25 modules dans le grogramme tous bâtis sur le même
cannevas.




Avatar
Celer
Harpo wrote:

Celer wrote:

Bonsoir,



Utilisez un truc comme electric-fence pour voir quand il y a un
débordement.

Je viens de l'installer ; je vais le mettre en oeuvre tout de suite. Merci

beaucoup pour ce tuyau. Jusqu'à présent j'utilisais mtrace(), mais celui-là
se préoccupe du hard ce qui semble s'imposer ici.


Avatar
Christophe Fillot
Celer wrote:

Utilisez un truc comme electric-fence pour voir quand il y a un
débordement.



Je viens de l'installer ; je vais le mettre en oeuvre tout de suite. Merci
beaucoup pour ce tuyau. Jusqu'à présent j'utilisais mtrace(), mais celui-là
se préoccupe du hard ce qui semble s'imposer ici.


Essayez Valgrind aussi, c'est très efficace.


Avatar
Celer
Christophe Fillot wrote:

Celer wrote:


Essayez Valgrind aussi, c'est très efficace.


Merci. Je note. En tout cas je viens de trouver l'erreur grace à efence ...
et quelques noeuds au cerveau (enfin, ce qui fait office de).

Avatar
Celer
Celer wrote:

Merci encore à tous, je viens de trouver l'erreur (grace à efence).

C'etait dans un module antérieur qui donnait (apparemment) satisfaction tant
que le dernier n'était pas "instancié".
Il s'agissait d'initialiser dans une structure un champs qui pointait sur un
tableau de pointeurs vers les lignes d'un tableau (dynamique) à deux
dimensions dont les éléments étaient eux-mêmes des pointeurs sur un type
particulier. Simple, quoi !
Avatar
Harpo
Celer wrote:

Il s'agissait d'initialiser dans une structure un champs qui pointait
sur un tableau de pointeurs vers les lignes d'un tableau (dynamique) à
deux dimensions dont les éléments étaient eux-mêmes des pointeurs sur
un type particulier. Simple, quoi !


C'est bizarre, ces trucs là ça marche toujours du premier coup
d'habitude.

--
http://patrick.davalan.free.fr/