C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Ca marchait, ça marche plus !

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Ludo
Guest





PostPosted: Wed Jan 14, 2004 1:16 pm    Post subject: Ca marchait, ça marche plus ! Reply with quote



Bonjour,

Je programme en Visual C++ 6 et j'ai un problème (normal sinon j'écrirai
pas...). En fait il y a plusieurs mois j'ai écris un petit programme et il
marchait très bien (en débug et en exe). Seulement depuis un petit moment
l'exe bugue sur une erreur dans msvcrtd.dll et le debug m'indique que
l'erreur se situe sur les lignes

char* heuref;
itoa(12,heuref,10);

je tiens à préciser que je n'ai fait aucune modification de code (de toute
façon ces lignes devraient fonctionner) alors comment puis-je faire pour
résoudre mon problème ? La dll est bien présente, faut-il que je la mette à
jour ? Peut-être un programme me l'a remplacé par une version compatible ?
Le problème vient-il bien de ce fichier ?

Merci par avance.


Back to top
Martinez Jerome
Guest





PostPosted: Wed Jan 14, 2004 2:12 pm    Post subject: [HS]Re: Ca marchait, ça marche plus ! Reply with quote



Ludo wrote:

Quote:
Bonjour,

Je programme en Visual C++ 6 et j'ai un problème (normal sinon j'écrirai
pas...). En fait il y a plusieurs mois j'ai écris un petit programme et il
marchait très bien (en débug et en exe). Seulement depuis un petit moment
l'exe bugue sur une erreur dans msvcrtd.dll et le debug m'indique que
l'erreur se situe sur les lignes

char* heuref;
itoa(12,heuref,10);

1/Le rapport avec le C++?
C'est du C ca...
2/Pas bien de ne pas reserver de la memoire avant d'utiliser un
pointeur... b.a.ba du C ;-)

Quote:

je tiens à préciser que je n'ai fait aucune modification de code

.... Et tu as eu beaucoup de chance de tomber sur une zone memoire libre...

Quote:
(de toute
façon ces lignes devraient fonctionner)*

absolument pas.

Quote:
alors comment puis-je faire pour
résoudre mon problème ?

coder correctement en faisant attention a la memoire :)

Quote:
La dll est bien présente, faut-il que je la mette à
jour ? Peut-être un programme me l'a remplacé par une version compatible ?
Le problème vient-il bien de ce fichier ?

Non, seulement de toi.

Quote:

Merci par avance.




Back to top
Ludo
Guest





PostPosted: Wed Jan 14, 2004 4:44 pm    Post subject: Re: [HS]Re: Ca marchait, ça marche plus ! Reply with quote



"Martinez Jerome" <jerome.martinez (AT) aenlever-orangefrance (DOT) com> a écrit dans
le message de news: bu3ip0$2111 (AT) news (DOT) rd.francetelecom.fr...
Quote:
Ludo wrote:

Bonjour,

Je programme en Visual C++ 6 et j'ai un problème (normal sinon j'écrirai
pas...). En fait il y a plusieurs mois j'ai écris un petit programme et
il
marchait très bien (en débug et en exe). Seulement depuis un petit
moment
l'exe bugue sur une erreur dans msvcrtd.dll et le debug m'indique que
l'erreur se situe sur les lignes

char* heuref;
itoa(12,heuref,10);

1/Le rapport avec le C++?
C'est du C ca...
2/Pas bien de ne pas reserver de la memoire avant d'utiliser un
pointeur... b.a.ba du C ;-)


je tiens à préciser que je n'ai fait aucune modification de code

... Et tu as eu beaucoup de chance de tomber sur une zone memoire libre...

(de toute
façon ces lignes devraient fonctionner)*

absolument pas.

alors comment puis-je faire pour
résoudre mon problème ?

coder correctement en faisant attention a la memoire :)

La dll est bien présente, faut-il que je la mette à
jour ? Peut-être un programme me l'a remplacé par une version compatible
?
Le problème vient-il bien de ce fichier ?

Non, seulement de toi.

Merci pour tes conseils mais dans tout ça tu ne m'as pas dit comment bien
coder ces lignes...



Back to top
Erwann ABALEA
Guest





PostPosted: Wed Jan 14, 2004 5:14 pm    Post subject: Re: [HS]Re: Ca marchait, ça marche plus ! Reply with quote

On Wed, 14 Jan 2004, Ludo wrote:

Quote:
"Martinez Jerome" <jerome.martinez (AT) aenlever-orangefrance (DOT) com> a écrit dans
le message de news: bu3ip0$2111 (AT) news (DOT) rd.francetelecom.fr...
Ludo wrote:
[...]
char* heuref;
itoa(12,heuref,10);

1/Le rapport avec le C++?
C'est du C ca...
2/Pas bien de ne pas reserver de la memoire avant d'utiliser un
pointeur... b.a.ba du C Wink
[...]
Merci pour tes conseils mais dans tout ça tu ne m'as pas dit comment bien
coder ces lignes...

Pourtant, je vois bien une réponse de Jérôme... Pour te mettre un peu plus
sur la voie: "malloc()", ça devrait t'aider.

--
Erwann ABALEA <erwann (AT) abalea (DOT) com> - RSA PGP Key ID: 0x2D0EABD5
-----
Je pense qu'un lecteur assidu se reconnaitra. James, si tu veux que
je réponde à ton message, même pour te dire que je n'ai pas envie de te
répondre, laisse-moi une adresse de retour !
-+-DM in : Guide du Neuneu d'Usenet : Je t'aime moi non plus -+-


Back to top
Alexandre
Guest





PostPosted: Wed Jan 14, 2004 7:39 pm    Post subject: Re: Ca marchait, ça marche plus ! Reply with quote

Quote:
char* heuref;
itoa(12,heuref,10);

Normal que ça ne marche pas.
Ton pointeur heuref n'est pas initialisé. ie qu'il "pointe" sur une adresse
mémoire aléatoire, donc dans certains cas, ça peut passer, et des fois non.
De plus, ici c'est 100% du C.
Si tu tiens à conserver un stockage en char* et l'utilisation de itoa, alors
il faut faire :

char heuref[11]; // tu reserves 10 caractères (+ le zéro final)
itoa(12,heuref,10);

mais l'emploi des objets du C++ serait nettement meilleur...




Back to top
Guillaume Gourdin
Guest





PostPosted: Wed Jan 14, 2004 9:34 pm    Post subject: Re: [HS]Re: Ca marchait, ça marche plus ! Reply with quote

Quote:
Merci pour tes conseils mais dans tout ça tu ne m'as pas dit comment bien
coder ces lignes...

En C++ :

string myString;
ostrstream myStream(myString);
myStream << 12; // maintenant myString == "12"



Back to top
Fabien LE LEZ
Guest





PostPosted: Wed Jan 14, 2004 11:45 pm    Post subject: Re: [HS]Re: Ca marchait, ça marche plus ! Reply with quote

On Wed, 14 Jan 2004 15:12:48 +0100, Martinez Jerome
<jerome.martinez (AT) aenlever-orangefrance (DOT) com> wrote:

Quote:
... Et tu as eu beaucoup de chance de tomber sur une zone memoire libre...

Je dirais plutôt qu'il a eu beaucoup de malchance. L'idéal, quand on a
un bug, c'est qu'il se manifeste tout de suite. Il n'y a rien de pire
que les bugs "clignotants".

--
;-)

http://www.gotw.ca/gotw/063.htm
http://www.gotw.ca/gotw/067.htm#2

Back to top
Ludo
Guest





PostPosted: Thu Jan 15, 2004 7:06 am    Post subject: Re: [HS]Re: Ca marchait, ça marche plus ! Reply with quote

Quote:
Je dirais plutôt qu'il a eu beaucoup de malchance. L'idéal, quand on a
un bug, c'est qu'il se manifeste tout de suite. Il n'y a rien de pire
que les bugs "clignotants".
Merci pour cette compassion, ce bug est arrangé grâce à vous mais j'ai

maintenant un autre bug avec des ajouts de CTimeSpan à des CTime et je me
demande si ça ne vient pas des changements d'heure hiver/été, je ferai appel
à vous si je ne trouve pas. Décidement ce programme me donne du fil à
retordre!



Back to top
Bertrand Motuelle
Guest





PostPosted: Thu Jan 15, 2004 8:36 am    Post subject: Re: [HS]Re: Ca marchait, ça marche plus ! Reply with quote

"Guillaume Gourdin" <nospam (AT) nospam (DOT) fr> wrote

Quote:
Merci pour tes conseils mais dans tout ça tu ne m'as pas dit comment bien
coder ces lignes...

En C++ :

string myString;
ostrstream myStream(myString);
myStream << 12; // maintenant myString == "12"

Pas du tout Sad
Ton exemple ne compile pas: les classes [io]strstream ne connaissent
pas std::string (elles fonctionnent avec des tableaux de caractères).


Et si tu voulais dire stringstream:
string myString;
ostringstream myStream(myString);
myStream << 12; // myString est toujours vide!

Pas de chance, ca ne marche pas non plus. stringstream fait une copie
de l'argument (ici myString) passé au constructeur. La ligne "myStream
<< 12;" n'a donc aucun effet sur myString.


Pour faire ce que voulais le posteur initial:
std::ostringstream oss;
oss << 12;
std::string heuref = oss.str();

(Hum, encore qu'ici 'std::string heuref("12");' ferait l'affaire)

Bertrand.

Back to top
Guillaume Gourdin
Guest





PostPosted: Thu Jan 15, 2004 9:49 am    Post subject: Re: [HS]Re: Ca marchait, ça marche plus ! Reply with quote

Quote:
Pour faire ce que voulais le posteur initial:
std::ostringstream oss;
oss << 12;
std::string heuref = oss.str();

Oui, mea culpa, j'ai posté trop vite. Et j'ai une question subsidiaire :
existe t'il un moyen d'indiquer la string d'un istringstream (et pas d'un
ostringstream) autrement que par le constructeur ?

Merci.



Back to top
Samuel Krempp
Guest





PostPosted: Sat Jan 24, 2004 5:51 pm    Post subject: Re: [HS]Re: Ca marchait, ça marche plus ! Reply with quote

le Thursday 15 January 2004 10:49, [email]toto (AT) toto (DOT) com[/email] écrivit :

Quote:
Pour faire ce que voulais le posteur initial:
std::ostringstream oss;
oss << 12;
std::string heuref = oss.str();

Oui, mea culpa, j'ai posté trop vite. Et j'ai une question subsidiaire :
existe t'il un moyen d'indiquer la string d'un istringstream (et pas d'un
ostringstream) autrement que par le constructeur ?

ouais,
ss.str("la nouvelle chaine à parser");
à noter que ça *copie* la string dans le stringstream, et que ça marche
aussi bien pour les (o|i|'')stringstream
Les stringstream se basent sur un stringbuf, qui fait tout par copie, quand
on sait ça on se rappelle plus facilement le comportement des stringstream.

--
Sam

Back to top
Samuel Krempp
Guest





PostPosted: Sat Jan 24, 2004 6:17 pm    Post subject: atoi // streams ([HS]Re: Ca marchait, ça marche plus !) Reply with quote

le Thursday 15 January 2004 09:36, [email]tib.motuelle (AT) laposte (DOT) net[/email] écrivit :
Quote:
Pour faire ce que voulais le posteur initial:
std::ostringstream oss;
oss << 12;
std::string heuref = oss.str();

qd ça commence à devenir un besoin fréquent, on peut en faire une fonction
(qui remplacera avantageusement les strtod, atoi, etc.., du C) :

#include #include <typeinfo> // pour bad_cast

// un mini boost::lexical_cast
template<class T>
T val_from_string(std::string const& s) {
std::stringstream converter(s);
T ret;
converter >> ret >> std::ws; // eat white-space
if(!converter) // conversion impossible
throw std::bad_cast;
if(! converter.eof()) // s n'a pas été entierement converti
throw std::bad_cast;
return ret;
}

ça s'utilise comme ça :
double d = val_from_string<double> ("3.124e05");

il faudrait une classe d'exception plus précise que bad_cast, par exemple
copier celle de boost::lexical_cast ..

et si boost est dispo, il suffit simplement d'utiliser boost::lexical_cast.
double d = boost::lexical_cast<double, std::string> ("3.123e05") ;


Le seul bémol, c'est que c'est cette façon de convertir est évidemment bcp
plus lente (je verrai bien un facteur 10. peut être 100 ..) que le très
basique atoi.
Et donc si on a besoin de convertir en masse des nombres, il sera surement
nécessaire d'utiliser une fonction spécialisée.
(pas forcément atoi, on peut garder plus de polyvalence en modifiant
val_from_string pour passer en parametre le stream de conversion à
utiliser, pour en prendre un custom et le garder d'un appel au suivant en
vidant juste le buffer - ça devient je pense d'une vitesse acceptable.
genre 60% de atoi, ou du genre..)

--
Sam

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.