violation d'accès ou pas

violation d'accès ou pas - C - Programmation

Marsh Posté le 19-10-2009 à 20:03:11    

Bonjour !
Voici mon programme !
http://ccoding.freehostia.com/show [...] c-to-all.c
 
tout se passe bien, à part une violation d'accès qui sort de nul part, surtout avec des nombres relativement grand, genre 10000 posera un problème, bien que la conversion la plus longue est celle en binaire, et qu'elle ne dépasse pas la limite du tableau càd 20.
 
Pouvez-vous m'indiquer d'où vient le problème, j'ai beau tâtonné avec le débugger en vain .
 
Merci d'avance !

Reply

Marsh Posté le 19-10-2009 à 20:03:11   

Reply

Marsh Posté le 19-10-2009 à 20:07:19    

Code :
  1. 1. #include <stdio.h> 
  2.    2. 
  3.    3. 
  4.    4. int main() 
  5.    5. { 
  6.    6. int base[14][20],compteur[14],reste=0,i,division,decimal; 
  7.    7. 
  8.    8. //Initialisation du compteur   
  9.    9. for(i=0;i<=14;i++) 
  10.   10. compteur[i] = 0; 
  11.   11. 
  12.   12. printf("Entrez un nombre en base decimale :\n" ); 
  13.   13. scanf("%d",&decimal); 
  14.   14. 
  15.   15. // de 2 à 16   
  16.   16. for(i=2;i<=16;i++) 
  17.   17. { 
  18.   18. division = decimal; 
  19.   19.          while(division != 0) 
  20.   20.          { 
  21.   21.          reste = division%i; 
  22.   22.          division = division/i; 
  23.   23.          base[i-2][compteur[i-2]++] = reste; 
  24.   24.          } 
  25.   25. 
  26.   26. compteur[i-2]--; //dernier element du tab est indexé n-1   
  27.   27. printf("\nBase %d : ",i); 
  28.   28.                 while(compteur[i-2] >= 0) 
  29.   29.                 { 
  30.   30.                 if (base[i-2][compteur[i-2]] >= 10) 
  31.   31.                 printf("%c",base[i-2][compteur[i-2]--]+55); //10+55 = 65(A)   
  32.   32.                 else 
  33.   33.                 printf("%d",base[i-2][compteur[i-2]--]); 
  34.   34.                 } 
  35.   35. 
  36.   36. } 
  37.   37. 
  38.   38. 
  39.   39. printf("\n" ); 
  40.   40. system("pause" ); 
  41.   41. return 0;     
  42.   42. }


 
base, compteur => 14 éléments, i sur [2; 16] => base[i-2][compteur[i-2] => explosion

Reply

Marsh Posté le 19-10-2009 à 20:09:28    

Tu itères ligne 16 de 2 à 16.
Ensuite tu vas tapper dans compteur[i - 2].
Compteur est un array de 14.
Donc quand tu passes la dernière fois, tu tappes dans compteur[14], la 15ème case.
 
Edit : grilled.


Message édité par regexp42 le 19-10-2009 à 20:09:59
Reply

Marsh Posté le 19-10-2009 à 20:22:35    

Ah oui, 16-2+1 ça fait 15, donc base[15][20] et compteur [15] !
 
Merci beaucoup vous deux !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed