Enregistrement avec Serialize et l'opérateur << - C++ - Programmation
Marsh Posté le 07-07-2004 à 12:06:07
Désolé d'insister mais c'est assez important. Taz, peut-être que tu pourrais m'aider vu que tu as l'air d'être le meilleur?
Marsh Posté le 07-07-2004 à 12:23:09
1 - Taz ne te répondra pas car tu sembles utiliser les MFC, et c'est pas trop son truc
2 - Je veux bien essayer de t'aider si tu postes le code qui plante, sinon je vois mal comment on pourrait deviner la cause de ton erreur
Marsh Posté le 07-07-2004 à 12:39:06
OK. Voici le code de toute ma classe CFEATDoc, comme ça si le problème vient d'ailleurs, vous pourrez peut-être le trouver.
Code :
|
Comme vous pouvez le constater, j'ai essayé avec différentes méthodes (fonctions fournies par Visual, réécrire des fonctions d'enregistrement...). Mais ça plante quand même.
Marsh Posté le 07-07-2004 à 13:42:02
furet->Donnees=(DONNEES_FURET *)malloc(sizeof DONNEES_FURET));
=> new
for i=0 ; i<furet->num_element ; i++) manque un (
ar >> (long furet->Caracteristiques.Debut_Chrono; => ?
le retour chariot est peut-être \r\n au lieu de \n ?
Marsh Posté le 07-07-2004 à 13:58:00
Si tu fais new au lieu de malloc, est-ce que tu peux utiliser realloc après?
Ah oui exact, erreur de frappe c'est :
Code :
|
(C'est bizarre que le compilo n'est rien dit!)
Qu'est-ce que tu veux dire par retour chariot? Je n'ai pas besion d'enregistrer des retours à la ligne mais j'utilise '\n' pour que la fonction ReadString() puisse ensuite lire les données ligne par ligne
Marsh Posté le 07-07-2004 à 13:59:44
J'ai fait un copié-collé et j'ai oublié de corriger l'erreur. le code est:
Code :
|
Marsh Posté le 07-07-2004 à 14:04:42
AH! Je sais pas pourquoi mais la parenthèse fermante ne passe pas! Dernière tentative, attention voici le code :
Code :
|
Marsh Posté le 07-07-2004 à 14:06:08
bin peut-être que ReadString considère \r\n comme retour chariot au lieu de \n ?
Marsh Posté le 07-07-2004 à 14:06:16
Et non ça passe pas! Bon allez, une dernière fois pour la route :
Code :
|
Marsh Posté le 07-07-2004 à 14:30:32
Y'a un truc qui est vraiment bizarre. Lorsque je quitte mon appli, je libère la mémoire en utilisant l'instruction free(). Si je ne sauvegarde rien, y'a pas de problème, ça marche parfaitement. Maintenant, si je rajoute des instructions pour sauvegarder et ouvrir, c'est à ce moment que la désallocation dynamique déconne. Il vient de là le message d'erreur. Je comprend pas pourquoi ça dépend de la sauvegarde.
Si j'enlève les instructions permettant de libérer la mémoire, y'a plus d'erreur.
Moi pas comprendre!
Marsh Posté le 08-07-2004 à 10:06:26
CARACTERISTIQUE_TEST* test
=> tu as définis un truc comme ca :
struct CARACTERISTIQUE_TEST
{
int Duree_Test;
CString Date;
CString Session;
CString Study;
CString Technician;
CString Titre;
};
?
si c'est le cas, et que tu l'alloue avec malloc, les constructeurs des CString ne seront pas executés ...
qd on dit que en C++ c'est new / delete et en C malloc / free, c pas juste pour faire joli.
Marsh Posté le 08-07-2004 à 14:06:22
Citation : Si j'enlève les instructions permettant de libérer la mémoire, y'a plus d'erreur. |
mais ya un joli memory leak -_-
Marsh Posté le 09-07-2004 à 09:01:42
C'est plûtot
[cpp]
struct CARACTERISTIQUE_TEST
{
int Duree_Test;
...
};
CARACTERISTIQUES_TEST Test;
Marsh Posté le 06-07-2004 à 16:03:34
Bonjour à tous,
J'ai créé une application windows permettant de gérer des documents et maintenant j'aimerais enregistrer les données puis les réouvrir. Le problème est que quand j'ouvre le fichier sauvegardé, j'obtiens un message d'erreur système.
De plus, si je sauvegarde des int, des float, y'a pas de problème pour les charger par contre si j'essais de sauvegarder un type CString en utilisant la fonction WriteString de la classe Serialize, là ça fait des dégats. Est-ce que quelqu'un sait comment faire.