Erreur Segmentation

Erreur Segmentation - C++ - Programmation

Marsh Posté le 03-11-2005 à 17:16:59    

Bonjour tout le monde ...
J'ain un petit pb ac un prog basique gérant des tableaux par classe...
La compilation ac c++ marche nikel
sauf ke kan j'utilise le case 1 du switch ... il me met
Erreur segmentation...
L'erreur doit etre vraiment basique mais je ne la trouve pas ...
Merci d'avance a ceux ki auront la patience de se mettre dedant !
Fitzdsl  
 
 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
 
class tableau
{
private :  int nbelmt;
  float *v;
 
public : tableau(int n)
  {
  if(n<=0)
   {
   printf("Erreure création du tableau\n" );
   exit(1);
   }
  nbelmt=n;
  v=new float[nbelmt];
  if(v==0)
   {
   printf("Erreure allocation du tableau\n" );
   exit(2);
   }
  }
 
 tableau()
  {
  nbelmt=10;
  v=new float[nbelmt];
  if(v==0)
   {
   printf("Erreure allocation du tableau\n" );
   exit(2);
   }
  }
 
 ~tableau()
  {
  delete v;
  printf("Destructeur utilisé !!\n" );
  }
 
 void afficher()
  {
  for(int i=0;i<nbelmt;i++)
   printf("|%f",v[i]);
  printf("|\n" );
  }
 
 float& operator[](int &i)
  {
  if(i<0 || i>=nbelmt)
   {printf("Valeur hors borne\n" );
    exit(3);
   }
  return v[i];
  }
 
 void operator=(tableau &t)
  {
  if(t.nbelmt>nbelmt)
   {
   printf("Erreur tableau a copier trop grand !!\n" );
   exit(4);
   }
  for(int i=0;i<t.nbelmt;i++)
   {v[i]=t.v[i];}
  }
 
 
 
 void affect()
  {
  for(int i=0;i<nbelmt;i++)
   {
   printf("Valeur de la %n eme valeur ?\n",i);
   scanf("%f",&v[i]);
   }
  }
 
 void reinit()
  {
  for(int i=0;i<nbelmt;i++)
   v[i]=0.0;
  }
 
   
};
 
main()
{
int n;
int c;
printf("Création du tableau\n" );
printf("Combien de case souhaitez-vous ?\n" );
scanf("%d",&n);
tableau t(n);
do{
printf("Que souhaitez-vous faire ?\n" );
 
printf("1 - Initialiser de maniere manuelle le tableau\n" );  
printf("2 - Afficher le contenu du tableau\n" );
printf("3 - Remettre a zéro le tableau\n" );
 
int choix=0;
scanf("%d",&choix);
switch (choix)
{
 
case 1 : t.affect();
  break;
 
case 2 : t.afficher();
  break;
 
case 3 :  t.reinit();
  break;
};  
printf("Souhaitez-vous faire d'autres opérations sur le tableau ? (1/2)\n" );
scanf("%d",&c);
}while(c==1);
}

Reply

Marsh Posté le 03-11-2005 à 17:16:59   

Reply

Marsh Posté le 03-11-2005 à 18:02:08    

une petite erreur dans ta fonction affect(); il fallait mettre    
printf("Valeur de la %i eme valeur ?\n",i);
et non  pas
printf("Valeur de la %n eme valeur ?\n",i);
 
voici le code corrigé
 

Code :
  1. #include <iostream>
  2. #include <cstdlib>
  3. class tableau
  4. {
  5. private
  6.   float *v;
  7. int nbelmt;
  8. public :
  9.      
  10.        tableau(int n)
  11.   {
  12.   if(n<=0)
  13.    {
  14.    printf("Erreur création du tableau\n" );
  15.    exit(1);
  16.    }
  17.  
  18.   nbelmt=n;
  19.   v=new float[nbelmt];
  20.  
  21.   if(v==0)
  22.    {
  23.    printf("Erreur allocation du tableau\n" );
  24.    exit(2);
  25.    }
  26.   }
  27. tableau()
  28.   {
  29.   nbelmt=10;
  30.   v=new float[nbelmt];
  31.   if(v==0)
  32.    {
  33.    printf("Erreur allocation du tableau\n" );
  34.    exit(2);
  35.    }
  36.   }
  37. ~tableau()
  38.   {
  39.   delete v;
  40.   printf("Destructeur utilisé !!\n" );
  41.   }
  42. void afficher()
  43.   {
  44.   for(int i=0;i<nbelmt;i++)
  45.    printf("|%f",v[i]);
  46.   printf("|\n" );
  47.   }
  48. float& operator[](int &i)
  49.   {
  50.   if(i<0 || i>=nbelmt)
  51.    {printf("Valeur hors borne\n" );
  52.     exit(3);
  53.    }
  54.   return v[i];
  55.   }
  56. void operator=(tableau &t)
  57.   {
  58.   if(t.nbelmt>nbelmt)
  59.    {
  60.    printf("Erreur tableau a copier trop grand !!\n" );
  61.    exit(4);
  62.    }
  63.   for(int i=0;i<t.nbelmt;i++)
  64.    {v[i]=t.v[i];}
  65.   }
  66. void affect()
  67.   {
  68.    
  69.   for(int i=0;i<nbelmt;i++)
  70.    {
  71.    printf("Valeur de la %i eme valeur ?\n",i);
  72.    scanf("%f",&v[i]);
  73.    }
  74.   }
  75. void reinit()
  76.   {
  77.   for(int i=0;i<nbelmt;i++)
  78.    v[i]=0.0;
  79.   }
  80.  
  81. };
  82. main()
  83. {
  84. int n;
  85. int c;
  86. printf("Création du tableau\n" );
  87. printf("Combien de case souhaitez-vous ?\n" );
  88. scanf("%d",&n);
  89. tableau t(n);
  90. t.affect();
  91. do{
  92. printf("Que souhaitez-vous faire ?\n" );
  93. printf("1 - Initialiser de maniere manuelle le tableau\n" ); 
  94. printf("2 - Afficher le contenu du tableau\n" );
  95. printf("3 - Remettre a zéro le tableau\n" );
  96. int choix=0;
  97. scanf("%d",&choix);
  98. switch (choix)
  99. {
  100. case 1 : t.affect();
  101.   break;
  102. case 2 : t.afficher();
  103.   break;
  104. case 3 :  t.reinit();
  105.   break;
  106. }; 
  107. printf("Souhaitez-vous faire d'autres opérations sur le tableau ? (1/2)\n" );
  108. scanf("%d",&c);
  109. }while(c==1);
  110. }


Message édité par sankukai8 le 03-11-2005 à 18:04:14
Reply

Marsh Posté le 03-11-2005 à 19:23:36    

std::vector ?? :whistle: ??

Reply

Marsh Posté le 03-11-2005 à 20:53:36    

c'est beau le C

Reply

Sujets relatifs:

Leave a Replay

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