[debugage] besoin daide langage C
Fermé
paulina82
Messages postés
1
Date d'inscription
vendredi 3 juin 2005
Statut
Membre
Dernière intervention
3 avril 2006
-
3 avril 2006 à 12:09
Baztien - 5 avril 2006 à 19:38
Baztien - 5 avril 2006 à 19:38
A voir également:
- [debugage] besoin daide langage C
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Delphi (langage) - Télécharger - Langages
2 réponses
mamiemando
Messages postés
33407
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
29 novembre 2024
7 806
5 avril 2006 à 09:34
5 avril 2006 à 09:34
On compile :
Tu peux déjà corriger ces warnings ;-) Ensuite on lance le bazar avec un debuggeur pour voir où ca plante :
Donc ca plante ligne 122 (appel de nb_occurences), plus précisemmment ligne 87
Je n'ai pas le temps de regarder plus en détail car je dois aller travailler, mais a priori il faudrait contrôler les valeurs de i,j,k,l et vérifier qu'elles ne sont pas en dehors du tableau.
Bonne chance
(mando@aldur) (~) $ gcc -g -W -Wall plop.c plop.c: In function ‘init_tab’: plop.c:39: warning: unused variable ‘l’ plop.c:39: warning: unused variable ‘k’ plop.c: In function ‘init_tab2’: plop.c:56: warning: unused variable ‘l’ plop.c:56: warning: unused variable ‘k’
Tu peux déjà corriger ces warnings ;-) Ensuite on lance le bazar avec un debuggeur pour voir où ca plante :
(mando@aldur) (~) $ gdb a.out GNU gdb 6.4-debian Copyright 2005 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-linux-gnu"...Using host libthread_db library "/lib/tls/libthread_db.so.1". (gdb) r Starting program: /home/mando/a.out a b c d Program received signal SIGSEGV, Segmentation fault. 0x08048586 in nb_occurences (image=0xbff4cc35, lig=5, col=5) at plop.c:87 87 if(image[i][j]==tablo[k][1] ){ (gdb) bt #0 0x08048586 in nb_occurences (image=0xbff4cc35, lig=5, col=5) at plop.c:87 #1 0x0804874c in main () at plop.c:122 (gdb)
Donc ca plante ligne 122 (appel de nb_occurences), plus précisemmment ligne 87
for(i=0;i<lig;i++){ for(j=0;j<col;j++){ for(k=0;k<3;k++){ if(image[i][j]==tablo[k][1] ){
Je n'ai pas le temps de regarder plus en détail car je dois aller travailler, mais a priori il faudrait contrôler les valeurs de i,j,k,l et vérifier qu'elles ne sont pas en dehors du tableau.
Bonne chance
Hello,
Je n'ai pas trop compris ce que tu cherchais précisement à faire... anyway
En fait, tu ne remet jamais à zéro ta variable ligne, donc tes lignes :
tb_occ[ligne][1] ++;
tablo[ligne][1]=image[i][j];
écrivent à des endroits de la mémoire qui ne sont pas réservés, c'est à cause de ça que se produit l'erreur de segmentation.
C'est effectivment piégeant parce que le SIGSEGV semble se produire sur image[i][j]==tablo[k][1] alors que le problème n'est pas là.
Bon courage :-)
A+,
Baztien
Je n'ai pas trop compris ce que tu cherchais précisement à faire... anyway
En fait, tu ne remet jamais à zéro ta variable ligne, donc tes lignes :
tb_occ[ligne][1] ++;
tablo[ligne][1]=image[i][j];
écrivent à des endroits de la mémoire qui ne sont pas réservés, c'est à cause de ça que se produit l'erreur de segmentation.
C'est effectivment piégeant parce que le SIGSEGV semble se produire sur image[i][j]==tablo[k][1] alors que le problème n'est pas là.
Bon courage :-)
A+,
Baztien