Violation d'accès

Fermé
haninoun12 Messages postés 6 Date d'inscription dimanche 8 novembre 2015 Statut Membre Dernière intervention 9 novembre 2015 - Modifié par haninoun12 le 9/11/2015 à 00:56
haninoun12 Messages postés 6 Date d'inscription dimanche 8 novembre 2015 Statut Membre Dernière intervention 9 novembre 2015 - 9 nov. 2015 à 18:37
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

BloodyAngel Messages postés 1482 Date d'inscription mardi 21 juin 2005 Statut Contributeur Dernière intervention 21 juin 2018 401
9 nov. 2015 à 01:04
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 dimanche 8 novembre 2015 Statut Membre Dernière intervention 9 novembre 2015
9 nov. 2015 à 18:37
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
9 nov. 2015 à 15:07
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 dimanche 8 novembre 2015 Statut Membre Dernière intervention 9 novembre 2015
9 nov. 2015 à 18:33
t'a raison mais j'ai changé la fonction .. bof je vais arreter la rien ne marche :'(
0