Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ca marchait, ça marche plus !

11 réponses
Avatar
Ludo
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.

10 réponses

1 2
Avatar
Martinez Jerome
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 par avance.




Avatar
Ludo
"Martinez Jerome" a écrit dans
le message de news: bu3ip0$
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...


Avatar
Erwann ABALEA
On Wed, 14 Jan 2004, Ludo wrote:

"Martinez Jerome" a écrit dans
le message de news: bu3ip0$
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 ;-)
[...]


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 - 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 -+-



Avatar
Alexandre
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...

Avatar
Guillaume Gourdin
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"

Avatar
Fabien LE LEZ
On Wed, 14 Jan 2004 15:12:48 +0100, Martinez Jerome
wrote:

... 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

Avatar
Ludo
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!

Avatar
tib.motuelle
"Guillaume Gourdin" wrote in message news:<7riNb.2374$...
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 :-(
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.


Avatar
Guillaume Gourdin
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.

Avatar
Samuel Krempp
le Thursday 15 January 2004 10:49, écrivit :

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


1 2