Du C au C++ avec STL: probleme resolu mais non compris - C++ - Programmation
Marsh Posté le 30-01-2003 à 17:06:10
c'est quoi les CHAR, PSTR? les string sont seulement compatibles avec les char et les char*. que dit ton débugger pour le plantage? (m'est d'avis que ca devrait meme pas compiler)
moi tout fonctionne bien. mettre le '\0' apres strncpy ne sert a rien.
Marsh Posté le 30-01-2003 à 17:14:47
++Taz a écrit : c'est quoi les CHAR, PSTR? les string sont seulement compatibles avec les char et les char*. que dit ton débugger pour le plantage? (m'est d'avis que ca devrait meme pas compiler) |
Ah oui pardon, c'est juste des typedefs.
typedef PSTR char*;
typedef CHAR char;
Le message d'erreur concerne le CRT , et indique un block dans le heap qui est corrompu.
Marsh Posté le 30-01-2003 à 17:26:54
ca vient de ton compilo ou alros t'es parti dans le decor quelque part.
tu peux essayer
strLine=string(pstrLine);
c'est à dire expliciter le constructeur
Marsh Posté le 30-01-2003 à 17:33:17
++Taz a écrit : ca vient de ton compilo ou alros t'es parti dans le decor quelque part. |
Merci; mais meme erreur. Bon, ca me rassure, c'est bien le compilo ou alors l'implementation STL qui deconne: j'obterai volontier pour le compilateur, vu que STLport est repute pour sa robustesse et que Visual 6 gere tres mal les templates.
Marsh Posté le 30-01-2003 à 17:45:18
++Taz a écrit : et t'as zeros warnings à la compilation? |
Ouaip, aucun warning (niveau par default: Level 3).
Avec les STL fournit avec Visual j'avais encore bien plus de problemes que cela. C'etait du delire, c'est pour ca que je suis passe a STLport, ca a resolu d'un coup plein de bugs. Sauf ce nouveau qui est apparu. Mais dans l'ensemble, ca va quand meme bien mieux qu'avant.
Marsh Posté le 30-01-2003 à 17:53:44
tu peux aussi essayer celle de SGI.
mais la je vois pas ou est le problème si ce n'est au niveau du compilateur
Marsh Posté le 30-01-2003 à 18:04:39
++Taz a écrit : tu peux aussi essayer celle de SGI. |
Merci bcp quand meme! STLport se base justement sur l'implementation de SGI. Je doute doncm que ca change grand chose. Mais ce n'est pas grave, ca marche comme ca. Je vais voir mon code sous UNIX, la ca devrait fonctionner dans les 2 cas.
Marsh Posté le 30-01-2003 à 18:08:47
[fixed][/fixed]Sous VisualC++ 6.0 (pas de ServicePack) avec l'implementation STL de Microsoft, j'ai essayé ça :
Code :
|
J'ai fait un truc qui ressemble beaucoup à ton programme et (bien évidemment) ça marche. Il semble donc que ce ne soit pas un problème du compilo...
Le mieux est encore de regarder en mode pas à pas ce qui se passe en mémoire (et notamment dans strLine). Peut être surveiller aussi ce que tu as dans pMapData ?
Marsh Posté le 30-01-2003 à 18:31:08
Bon, dur dur.
m_pMapData est un pointeur sur un fichier mappe en memoire.
ca ne devrait rien changer de toute facon.
Je cherche, il doit en effet y avoir un bug ailleurs dans mon code, mais c'est bizard qu'avec l'operateur +=, le probleme ne se pose pas aussi.
Je cherche...
Marsh Posté le 30-01-2003 à 18:34:37
gatorette a écrit : [fixed][/fixed]Sous VisualC++ 6.0 (pas de ServicePack) avec l'implementation STL de Microsoft, j'ai essayé ça : |
Je n'ai pas mis de +1, car m_pMapData est un fichier mappe, est pas une chaine de charactere. Donc il n'y a pas de '\0' en fin de la chaine desiree.
Marsh Posté le 31-01-2003 à 00:27:06
Et en pas à pas, ça donne quoi ? Tout semble bien ?
Marsh Posté le 31-01-2003 à 04:16:58
Et avec ça ?
Code :
|
Marsh Posté le 31-01-2003 à 09:01:15
Dans le même genre, si quelqu'un pouvait me dire pourquoi ce code compile alors qu'il ne fonctionne pas :
Code :
|
teste sur Linux RedHat 7.3, gcc 3.2
Marsh Posté le 31-01-2003 à 10:35:37
Ca veux dire quoi qu'il ne fonctionne pas ? core dump ? Affiche rien ?
D'après ce que je sais de "string", je prédis qu'il ne se passe rien ou presque car "s = 1" correspond à operator =(char c) qui va créer une chaine de longueur 1 ne contenant que le caractère c. Et donc, tu te retrouves avec cette chaine : "\1". Bien sur, \1 n'est pas affichable
Marsh Posté le 31-01-2003 à 12:56:02
Yep, sous entendu que "la conversion de 2 en "2" ne fonctionne pas"
Il affiche un car a la con.
C'est bizarre ... je lui file un int, il utilise l'operateur =(char) sans me fouttre un avertissement ... pourtant la conversion int => char donne lieu a un warning normalement nan ?
Marsh Posté le 31-01-2003 à 14:02:24
Ca doit etre parceque 1 n'est pas un int mais représente le chiffre 1. Si tu avais int a = 1; s = a; peut-etre alors aurait eu un warning.
Marsh Posté le 31-01-2003 à 14:44:33
J'ai testé :
Code :
|
0 erreur, 0 warning ...
Marsh Posté le 31-01-2003 à 15:19:56
C'est dommage n'est ce pas
Mais bon, si tu veux convertir un entier en chaine de caractères, il y a d'autres moyens pour ça :
Edit : c'est deprecié, utilise sstream à la place.
Marsh Posté le 30-01-2003 à 16:55:09
Salut a tous,
Voila le probleme (sous Visual Studio 6, SP5, utilisation de STLport au lieu de l'implementation STL de Microsoft qui est pourrie ):
J'ai une fonction C++, qui a comme parametre une reference sur un object string. J'affecte a ce string un buffer temporaire char* alloue avec un new, puis je detruit ce buffer (ne pas me demander pourquoi une telle manipe horrible, je suis malheureusement oblige dans ce cas la).
Tout semble marcher, mais quand j'arrive dans le destructeur du string, j'ai un plantage (memoire corrompue) .
Si je remplace l'affectation du string (operateur =), par l'operateur +=, tout rentre dans l'ordre, plus de plantage
Voici un extrait du bout de code:
Est ce qu'un guru en STL pourrait m'aider?
Merci d'avance!!!
Message édité par YungMakko le 30-01-2003 à 16:56:10
---------------
In tartiflette, we trust!