IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

depassement ou default segmentation


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut depassement ou default segmentation
    Quand je compile il m'affiche juste ce qui est dans ma fonction provc apres ce qui est dans le main() n'est pas afficher si vous avez idée SVP. en plus c'est pour afficher des nombre compris en 0--Nb-2 sauf le voleur donner dans le main() puisqu'il Nb elmts donc si je commence par 0 c'est jusqu'à Nb-1 sauf voleur generer et en un exemplaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>
     
    int fonct(int *tab, int r, int Nb,int c)
    {
      int index=0;
      int i=0;
      int Nbo=0;
      if((r==0) && (tab[0]==0))
        index=0;
     
      else
     
        while((Nbo<=r) && (i<Nb))
     
     { 
       if(tab[i]==0)
         Nbo++;
       i++;
       if(c==(Nb-1)) 
         { 
           if(tab[c]==0) index=c;
           else break;
         }
       index=i-1;
     }
     
      return index;
    }
    int *provc(int Nb,int voleur)	 
    {
      int *ta,r,c,vic,*d;
      ta=(int*)calloc(Nb,sizeof(int));
      d=(int*)calloc((Nb-1),sizeof(int));
      ta[voleur]=1;
      r=rand()%(Nb-1);
      c=0;
      do{
            vic=fonct(ta,r,Nb,c);
    	if((ta[vic]==0) && (vic!=voleur)) 
    	  {
    	    ta[vic]=1;
    	d[c]=vic;
    	printf("d[%d]=%d\n", c,d[c]);
    	c=c+1;
    	if((Nb-c)!=0)
    	  r=rand()%(Nb-c);
    	  }
     
    	else
    	{
    	  while(c<Nb) 
    	    { if(ta[c]==0)
    	      d[c]=1;
    	    d[Nb-1]=c; 
    	    break;
    	    }
    	}
      } 
      while(c<=(Nb-1));
      printf("\n");
      for(c=0;c<=(Nb-1);c++) printf("d[%d]=%d\n", c,d[c]);
      return d;
    }
    int main(int argc, char *argv[])
    {
      int Nb,i,voleur;
      int *vole;
      srand(time(NULL));
      Nb=atoi(argv[1]);
      vole=(int*)calloc((Nb-1),sizeof(int));
      voleur=rand()%Nb;
      printf("voleur=%d\n",voleur);
      i=0;
      vole=provc(Nb,voleur);
      for(i=0;i<(Nb-1);i++)
        printf("volé=%d\n", vole[i]);
      return 0;
     
    }

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut


    • Primo exprime-toi correctement en français, on comprend rien à ce que tu racontes..

    • Secondo, met des commentaires et indente correctement ton code stp. C'est illisible....

  3. #3
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
     
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>
    /*****************************************/
    // tourne une victime qui sera stocké dans le tableau des victime
    int fonct(int *tab, int r, int Nb,int c)
    {
      int index=0;
     
      int i=0;
     
      int Nbo=0;
     
      if((r==0) && (tab[0]==0))
     
        index=0;
      else
     
        while((Nbo<=r) && (i<Nb))
          { 
    	if(tab[i]==0)
     
    	  Nbo++;
    	i++;
     
    	if(c==(Nb-1)) 
    	  {
    	    if(tab[c]==0) 
    	      index=c;
     
    	    else break;
         }
     
    	index=i-1;
          }
     
      return index; 
    }
    /**********************************************************/
    // fonction qui retourne le tableau des victime excepte le voleur
    int *provc(int Nb,int voleur)	 
     
    {
      int *ta,r,c,vic,*d;
     
      ta=(int*)calloc(Nb,sizeof(int));
     
      d=(int*)calloc((Nb-1),sizeof(int));
     
      ta[voleur]=1;
     
      r=rand()%(Nb-1);
     
      c=0;
     
      do{
        vic=fonct(ta,r,Nb,c);
     
        if((ta[vic]==0) && (vic!=voleur)) 
     
          {
     
    	ta[vic]=1;
     
    	d[c]=vic;
     
    	printf("d[%d]=%d\n", c,d[c]);
          }
        c=c+1;
     
        if((Nb-c)!=0)
     
          r=rand()%(Nb-c);
     
     
     
        else
     
          {
    	while(c<Nb) 
     
    	  { 
    	    if(ta[c]==0)
    	    {  
    	      d[c]=1;
     
    	      d[Nb-1]=c; 
    	    }
    	    break;
     
    	  }
          }
     
      } 
      while(c<=(Nb-1));
     
      printf("\n");
     
      for(c=0;c<=(Nb-1);c++) printf("d[%d]=%d\n", c,d[c]);
     
      return d;
    }
    /***********************************************/
     
    int main(int argc, char *argv[])
    {
      int Nb,i,voleur;
     
      int *vole;
     
      srand(time(NULL));
     
      Nb=atoi(argv[1]);
     
      vole=(int*)calloc((Nb-1),sizeof(int));
     
      voleur=rand()%Nb;
      printf("voleur=%d\n",voleur);
      vole=provc(Nb,voleur); // appel de la fonction 
     
      for(i=0;i<(Nb-1);i++)
        printf("volé=%d\n", vole[i]);
      return 0;
    }
    sur Nb=5 j'aurai 4 victime excepte le voleur lui meme et en plus pas de double parmi les victimes.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par boula
    Quand je compile il m'affiche juste ce qui est dans ma fonction provc apres ce qui est dans le main() n'est pas afficher si vous avez idée SVP. en plus c'est pour afficher des nombre compris en 0--Nb-2 sauf le voleur donner dans le main() puisqu'il Nb elmts donc si je commence par 0 c'est jusqu'à Nb-1 sauf voleur generer et en un exemplaire.
    <...>
    • Tu ne tiens pas compte des remarques précédentes (casts inutiles, test des calloc(), libération...)
    • On ne voit pas ce que tu veux faire.

    Il faut être beaucoup plus précis, simple et clair dans ta demande et surveiller les indices. Il ne doivent jamais déborder de la taille des tableaux. Ton code parait inutilement compliqué. Il semble que tu alloues 2 fois un tableau et que l'adresse du bloc soit stockée dans le même pointeur, ce qui rend le premier non-libérable (fuite mémoire).

  5. #5
    Membre confirmé
    Homme Profil pro
    Cycles en Informatique
    Inscrit en
    Juin 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Cycles en Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2007
    Messages : 67
    Par défaut
    Remarque pris en compte j'ai pu regler ça en faite c'est au niveau des indices et des compter s que j'utilise ou c'est trouve le probleme .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Segmentation Default , je ne trouve pas l'erreur
    Par Invité dans le forum C++
    Réponses: 7
    Dernier message: 09/05/2013, 07h36
  2. [VB6] [Interface] Horloge 7 segments
    Par selenay dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/10/2002, 16h15
  3. [TASM] Déclarer le segment de pile
    Par cipher dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 01/10/2002, 03h58
  4. Glisser/Depasser
    Par nico1492 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 27/09/2002, 16h43
  5. angle entre 2 segments
    Par tane dans le forum Mathématiques
    Réponses: 4
    Dernier message: 25/09/2002, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo