Erreur de segmentation suite au passage à SuSE 8.1

Erreur de segmentation suite au passage à SuSE 8.1 - C++ - Programmation

Marsh Posté le 04-02-2003 à 16:49:08    

J'ai un programme qui fonctionnait bien sous SuSE 7.2
Je viens d'installer SuSE 8.1, et là ça va plus.
 
Voici la partie du code.
C'est une méthode d'une classe, et c'est là que ça plante,
lorsque j'essaye d'affichier ou d'utiliser le float (f_ret en l'occurence) :
 

Code :
  1. int CSti::GetInverterVin(char* &asVin){
  2. int iTypeVal,iRet;
  3. char commande[10];
  4. float f_ret;
  5. int ret;
  6. ret=CInverters::GetInverterVin(asVin);
  7. printf("On reçoit la chaine: %s\n",asVin);
  8. iRet=atoi(asVin);
  9. printf("en entier ça donne : %d\n",iRet);
  10. printf("fret vaut : \n%f\n",f_ret);
  11. try {
  12.  f_ret=strtod(asVin,NULL);
  13.  if(f_ret==-1)
  14.   printf("erreur strtod\n" );
  15. } catch (...){
  16.  printf("Ohhh.......problème\n" );
  17. }


 
Donc je reçois une donnée en chaine de caractères.
Je l'affiche, pas de problème.
Je la transforme en entier, et j'affiche, pas de problème.
 
Mais dès que j'utilise un float, ça va plus.
Encore plus bizarre (et c'est peut-être de là que vient l'erreur.)
Si j'ajoute la ligne :
 

Code :
  1. int CSti::GetInverterVin(char* &asVin){
  2. int iTypeVal,iRet;
  3. char commande[10];
  4. int ret;
  5. float f_ret;
  6. ret=CInverters::GetInverterVin(asVin);
  7. printf("On reçoit la chaine: %s\n",asVin);
  8. iRet=atoi(asVin);
  9. printf("en entier ça donne : %d\n",iRet);
  10. float nouveau_float=5;
  11. printf("Le nouveau float vaut : %f\n",nouveau_float);
  12. printf("fret vaut : \n%f\n",f_ret);
  13. try {
  14.  f_ret=strtod(asVin,NULL);
  15.  if(f_ret==-1)
  16.   printf("erreur strtod\n" );
  17. } catch (...){
  18.  printf("Ohhh.......problème\n" );
  19. }


 
ça ne va plus non plus.
Comme si àje ne pouvais pas utiliser de float.
 
.....une idée ???????


Message édité par warp le 04-02-2003 à 18:12:25

---------------
Il n'est pas nécéssaire de réussir pour persévérer.
Reply

Marsh Posté le 04-02-2003 à 16:49:08   

Reply

Marsh Posté le 04-02-2003 à 17:19:57    

euuuhhhhh


---------------
Il n'est pas nécéssaire de réussir pour persévérer.
Reply

Marsh Posté le 04-02-2003 à 17:24:03    

Utilises les balises "cpp" s'il te plait et pas les balises "citation"
 

Code :
  1. int CSti::GetInverterVin(char* &asVin){


 
CSti::GetInverterVin prend en paramètre une reference sur un char * ??? C'est vraiment ce que tu veux ?
 
Envisage d'abandonner completement les char * au profit des string

Reply

Marsh Posté le 04-02-2003 à 18:10:54    

Non, je ne dois pas forcément garder des char*,
mais je ne pense pas que ce soit l'origine du problème.
 
Je modifierais tout de même ça demain.


---------------
Il n'est pas nécéssaire de réussir pour persévérer.
Reply

Marsh Posté le 04-02-2003 à 18:12:54    

C'est bien plus clair avec les balises cpp....  :)


---------------
Il n'est pas nécéssaire de réussir pour persévérer.
Reply

Marsh Posté le 04-02-2003 à 18:30:10    

Ce genre d'erreur ressemble a une corruption de pile ou même du tas et c'est pour cela que je te demandes la raison de cette reference :)

Reply

Marsh Posté le 05-02-2003 à 09:16:01    

J'ai résolu le problème.
J'utilisais un char * qui n'était pas initialisé.
J'imagine que lors de la première utilisation, l'OS lui attribuait une taille précise, et que par la suite je dépassais cette taille......ou un truc du genre.
 
 
Pour ce qui est des string, je connais, en visual C++ les CString,
mais en C++ qu'est-ce qu'on doit utiliser ?
Parce que string n'est pas reconnu comme un tout,
String non plus, CString non plus ??


---------------
Il n'est pas nécéssaire de réussir pour persévérer.
Reply

Marsh Posté le 05-02-2003 à 10:29:56    

Code :
  1. #include <string>
  2. std::string s = "Hello";


 
ou
 

Code :
  1. #include <string>
  2. using namespace std;
  3. string s = "Hello";


Reply

Marsh Posté le 06-02-2003 à 09:23:42    

Désolé, mais ça ne marche toujours pas....
 

Code :
  1. main.cpp: In function `int main()':
  2. main.cpp:26: `string' undeclared in namespace `std'
  3. main.cpp:26: parse error before `=' token
  4. make: *** [main] Erreur 1


 
Je suis sous Linux, y a peut-être une différence...? !
 
Ah, autre question :
pourquoi mets-tu
 

Code :
  1. #include <string>


 
et pas  
 

Code :
  1. #include <string.h>


---------------
Il n'est pas nécéssaire de réussir pour persévérer.
Reply

Sujets relatifs:

Leave a Replay

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