Violation d'accès

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;
   }
  }
 }
}

2 réponses

  1. Contributeur
    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
    1. 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