Violation d'accès

haninoun12 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
haninoun12 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, je suis débutante en langage c et j'ai fait une fonction récursive qui cherche les occurrences dans un tableau non trié, et les supprimer en décalant les cases.. je ne sais pas si il ya une faute dans ma fonction car le programme demarre mais quand je choisis cette fonction, tout s'arrète et on m'affiche :
.
Exception non gérée à 0x003D1DF1 dans testsTP1.exe : 0xC0000005 : Violation d'accès lors de la lecture de l'emplacement 0x00250000.
.
si vous pouvez m'aider s'il vous plait...??
.
J'utilise visual studio express 2012

voici ma fonction:
void suppressionSequentielle(int tableau[],int taille,int occurrences){
 int k = 0, j = 0, i = 0;
 if(taille < 2){
  return; 
 }
 for(i = taille-1; i > 0 ; i--){
  for(j = i-1; j >= 0 ; j++){
   if(tableau[i] == tableau[j]){
    for(k = i; k < taille ; k++){
     tableau[j+1] = tableau[k+1];
    }
    occurrences++; 
                                taille -= occurrences;
   }
  }
 }
}
A voir également:

2 réponses

BloodyAngel Messages postés 1482 Date d'inscription   Statut Contributeur Dernière intervention   403
 
Hello,

dans la dernière boucle :
    for(k = i; k < taille ; k++){
tableau[j+1] = tableau[k+1];
}


Tu arrête la boucle au moment où
k==taille
(condition
k<taille
non remplie, la boucle s'arrête).
Donc à la dernière itération, k sera égal à taille-1.
Mais dans la boucle tu fais référence à
tableau[k+1]
.
Donc dans la dernière itération, ça devient
tableau[taille-1+1]
autrement dit
tableau[taille]
.
Les indices commençant à zéro dans un tableau,
tableau[taille]
fait d'office référence à un élément hors du tableau. Et là ton programme accède à un emplacement mémoire qui ne lui est pas attribué, d'où erreur.
0
haninoun12 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai fait

for(k = i; k < taille ; k++){
tableau[k-1] = tableau[k];
}

mais c la meme chose..
j'ai commenté la boucle i (la premiere ) et sa casse pas mais la fonction ne fait rien .. :/
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Merci de ne pas créer de doublon. Tu as déjà créer ce post ici : https://forums.commentcamarche.net/forum/affich-32755172-supprimer-occurrences-dans-un-tableau#p32755610
Autant continuer sur cette conversation, ça sera plus simple pour tout le monde.


Google is your friend
0
haninoun12 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
t'a raison mais j'ai changé la fonction .. bof je vais arreter la rien ne marche :'(
0