Problème de Core Dumped !
Bonjour,
j'ai un petit problème de Core Dumped (segmentation fault) :D qui m'énerve beaucoup :evil: !
D'aprés mes tests (printf successifs), cela viendrait de cette ligne :
Code:
while( j>0 && strcmp(t[j].nom,t[j-1].nom)<0)
Si vous avez une idée, n'hésitez pas !
Merci d'avance. :wink:
PS: je vous laisse le code complet :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| #include "stdio.h"
#include "stdlib.h"
#define MAX 250
// Definition des structures
typedef struct{
char* nom;
int n;
}structure;
// Methode
void tri_insertion(structure t[], int n)
{
int i,j;
structure tmp;
for(i=1;i<n;i++)
{
j=i;
while( j>0 && strcmp(t[j].nom,t[j-1].nom)<0)
{
// Permuter
tmp=t[j];
t[j]=t[j-1];
t[j-1]=tmp;
j=j-1;
}
}
}
// Main()
int main()
{
structure tab_conf[MAX];
int nb_conf=0;
int i=0;
structure* nouveau = malloc(sizeof(structure));
while(i<8)
{
scanf("%s",&nouveau->nom);
tab_conf[nb_conf]=*nouveau;
nb_conf++;
tri_insertion(tab_conf,nb_conf);
i++;
}
for(i=0;i<nb_conf;i++)
printf("%s",tab_conf[i].nom);
return 0;
} |
:arf:
Re: Problème de Core Dumped !
Citation:
Envoyé par KneXtasY
j'ai un petit problème de Core Dumped (segmentation fault)
Tu as de la chance que ton système surveille ton code...
Citation:
PS: je vous laisse le code complet :
Code partiellement commenté et corrigé.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
/* -ed-
#include "stdio.h"
#include "stdlib.h"
pour les entetes standards, c'est pas " " mais < >
*/
#include <stdio.h>
#include <stdlib.h>
/* -ed-
ajoute pour strcmp().
Apprendre a mieux regler son compilateur peut sauver des vies...
*/
#include <string.h>
#define MAX 250
// Definition des structures
typedef struct{
char* nom;
/* -ed- attention, pointeur non initialise... */
int n;
}
structure;
// Methode
/* -ed- fonction non exportee : ajoute 'static' */
static void tri_insertion(structure t[], int n)
{
int i, j;
structure tmp;
for (i = 1;i < n;i++)
{
j = i;
while ( j > 0 && strcmp(t[j].nom, t[j - 1].nom) < 0)
{
// Permuter
tmp = t[j];
t[j] = t[j - 1];
t[j - 1] = tmp;
j = j - 1;
}
}
}
// Main()
int main()
{
structure tab_conf[MAX];
int nb_conf = 0;
int i = 0;
structure* nouveau = malloc(sizeof(structure));
/* -ed-
malloc() peut echouer. De plus, la valeur de nouveau->nom
est toujours indeterminee...
Pourquoi une allocation dynamique de la structure ?
*/
if (nouveau != NULL)
{
while (i < 8)
{
/* -ed-
scanf("%s",&nouveau->nom);
Comportement indéfini :
"%s" attend l'adresse du premier element d'un tableau de char.
Pas l'adresse d'un pointeur sur char
(non initialise, de surcroit).
D'autre part, comme souvent, scanf() est ici mal utilise.
- Pas de limitation de la taille saisie
- Pas de test de la valeur retournee
- Pas de possibilité de saisir un espace...
scanf() n'est pas une fonciotn de debutant, ni meme de
confirme...
Alternatives :
<a href="http://emmanuel-delahaye.developpez.com/notes.htm" target="_blank">http://emmanuel-delahaye.developpez.com/notes.htm</a>
<a href="http://emmanuel-delahaye.developpez.com/notes.htm" target="_blank">http://emmanuel-delahaye.developpez.com/notes.htm</a>
*/
scanf("%s", nouveau->nom);
tab_conf[nb_conf] = *nouveau;
/* -ed-
attention, en admettant que la zone pointee par
nouveau->nom soit valide, le pointeur serait recopie, mais pas la
zone pointee...
Je ne sais bien ce que tu cherches a faire mais c'est louche...
*/
nb_conf++;
tri_insertion(tab_conf, nb_conf);
/* -ed- ca fout la trouille... */
i++;
/* -ed- varie comme 'nb_conf'. Est-ce bien utile ? */
}
for (i = 0;i < nb_conf;i++)
printf("%s", tab_conf[i].nom);
/* -ed-
Sortie incertaine. Il manque un '\n' ou un fflush(stdout)
Evidemment, dans une structure de code, il est toujours preferable
d'ajouter les { }...
*/
/* -ed- memoire non liberee... Ajoute : */
free (nouveau), nouveau = NULL;
}
return 0;
} |
Re: Problème de Core Dumped !
Citation:
Envoyé par Emmanuel Delahaye
Citation:
Envoyé par KneXtasY
j'ai un petit problème de Core Dumped (segmentation fault)
Tu as de la chance que ton système surveille ton code...
Oui, je travaille sous Cygwin (Bon ok c'est pas un système :wink:).
Citation:
Envoyé par Emmanuel Delahaye
Code partiellement commenté et corrigé.
Merci beaucoup !
C'est vrai qu'il y avait pas mal de trucs louches :D ...
Bon le main() avait juste pour but de tester le tout mais n'a aucun interet !
Merci.
:hola: