Erreur de segmentation en C
Discutez d'informatique ici !
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 08:03
-
par ampholyte » 08 Jan 2014, 00:13
Bon ok, est-ce que dans ta fonction write_chunk tu pourrais faire 2 traces différentes pour voir ce qui se passe.
- Code: Tout sélectionner
void write_chunk(int start_block,char* buffer,int n) //n octet dans buffer
{
int nbBande=compute_nstripe(n);
int nbBlockParite=(start_block/g_disk.ndisk);
int blockCourant=(start_block + nbBlockParite);
int diskCourant=0;
int pos;
int k;
fprintf(stdout, "nbBande : %d\n", nbBande);
for(k=0;k<nbBande;k++) /*On parcourt les bandes*/
{
diskCourant=(blockCourant % g_disk.ndisk);
fprintf(stdout, "diskCourant : %d\n", diskCourant);
if (g_disk.storage[diskCourant] != NULL) /*disk courant existe*/
{
pos=fseek(g_disk.storage[diskCourant],(blockCourant*BLOCK_SIZE),SEEK_SET);
write_stripe(&buffer,pos);
blockCourant=blockCourant+1;
if (blockCourant==g_disk.ndisk-1)
{
blockCourant=0;
}
}
}
}
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 19:42
-
par Rockleader » 08 Jan 2014, 00:17
Voilà le résultat
- Code: Tout sélectionner
nbBande : 21
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
diskCourant : 0
C'est pas logique la valeur de diskCourant devrait changer !!!
J'ai trouvé ce qui planté je n'incrémentait pas blockCourant tous le temps; je l'ai sorti du if.
En revanche je prend une nouvelle erreur de segmentation
nbBande : 21
diskCourant : 0
diskCourant : 1
Erreur de segmentation (core dumped)
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 08:03
-
par ampholyte » 08 Jan 2014, 00:37
Rajoute une trace entre chaque partie pour voir où cela plante.
Peux-tu remettre le code de ta fonction white_stripe ?
-
Rockleader
- Habitué(e)
- Messages: 2126
- Enregistré le: 11 Oct 2011, 19:42
-
par Rockleader » 08 Jan 2014, 00:45
ampholyte a écrit:Rajoute une trace entre chaque partie pour voir où cela plante.
Peux-tu remettre le code de ta fonction white_stripe ?
Je viens de rendre mon projet
De toute façon je m'en doutais que je ne pourrais pas le terminé en une journée et une nuit. J'en ai fait à peine le tiers...m'enfin bref.
Je pense que je vais le continuer à mon rythme; après tout la note c'est pas le plus important, puis je verrais bien le corrigé après. (Disons que si j'ai pas raté les partiels ça devrait le faire sinon...)
Merci en tout cas ! de ta disponibilité et ta patience.
Sur ce, j'ai une nuit blanche derrière mois alors =) Bonne nuit :dodo:
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !
-
ampholyte
- Membre Transcendant
- Messages: 3940
- Enregistré le: 21 Juil 2012, 08:03
-
par ampholyte » 08 Jan 2014, 00:57
Pas de problème =).
Bonne nuit à toi.
Un petit conseil pour la prochaine fois (histoire que ce soit plus simple pour tout le monde), fais toi un petit dépôt github pour que l'on puisse avoir accès à tes sources afin de cibler plus rapidement le problème =).
D'ailleurs si tu souhaites poursuivre ce projet n'hésite pas à le faire comme cela il sera plus facile de t'aider.
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 13:00
-
par fatal_error » 11 Jan 2014, 21:11
hello,
conclusion du projet:
faire des tests unitaires.
la vie est une fête
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités