begin process at 2012 05 29 12:05:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Divers

 > 

Fuite de mémoire pas bien mechante mais suante


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Fuite de mémoire pas bien mechante mais suante

vendredi 10 octobre 2003 à 08:18:29 | Fuite de mémoire pas bien mechante mais suante

Trollien


Bonjour,

j'approfondi mais diverses connaissances en c++ et je suis tombé sur un phénomène bien connu et plutôt génant dans une application temps réel.
J'ai réussi à déterminer la partie de code la générant le voici:

struct MyString
{
public:
char* buffer;
MyString()
{
buffer = "";
}
void operator+=(char* buffer2)
{
int lenbuf1 = strlen(buffer);
int lenbuf2 = strlen(buffer2);
int lenTot = lenbuf1 + lenbuf2 + 1;
char* temp = buffer;
buffer = new char[lenTot];
ZeroMemory(buffer,lenTot);
strncpy( buffer,temp ,lenbuf1);
lstrcat(buffer,buffer2);
}
void operator=(char* buffer2)
{
buffer = buffer2;
}
void operator=(MyString buffer2)
{
buffer = buffer2.buffer;
}
};

c'est donc une structure qui est interne à une classe et à priori ce serait l'operateur += qui fuirait.
Si qqn peut m'expliquer à quel moment la fuite peut se produire svp?
Merci d'avance.

p.s: je sais qu'il existe des classes tte faites mais mon but et plutôt dirigé apprentissage.
vendredi 10 octobre 2003 à 11:32:05 | Re : Fuite de mémoire pas bien mechante mais suante

fredcl

Bonjour,

j'ai pas le temps de tester tout ça, mais ça devrais résoudre tes problèmes de fuite.


struct MyString
{
public:
char* buffer;
MyString()
{
buffer = 0;
}
void operator+=(char* buffer2)
{
int lenbuf1 = strlen(buffer);
int lenbuf2 = strlen(buffer2);
int lenTot = lenbuf1 + lenbuf2 + 1;
char* temp = buffer;
buffer = new char[lenTot];
ZeroMemory(buffer,lenTot);
strncpy( buffer,temp ,lenbuf1);
lstrcat(buffer,buffer2);
if (temp != 0)
delete [] temp;
}
void operator=(char* buffer2)
{
if (buffer != 0)
delete [] buffer;
buffer = buffer2;
}
void operator=(MyString buffer2)
{
if (buffer != 0)
delete [] buffer;
buffer = buffer2.buffer;
}
};

A+

Fred
vendredi 10 octobre 2003 à 19:20:15 | Re : Fuite de mémoire pas bien mechante mais suante

Trollien


Il semble que l'operateur delete génére une Exception (que je ne gère pas) :
Exception non gérée à 0x77f667cd dans DirectX9Application1.exe:Point d'arrêt utilisateur.

Je te remercie de ton aide. :)
dimanche 14 mars 2004 à 17:23:23 | Re : Fuite de mémoire pas bien mechante mais suante

ensiame

Pas le temps de lire tout en détails.

Tu as un char* temp = buffer dans un coin.

Donc temp et buffer pointent sur les mêmes zones allouées.

Le problème, c'est que tu as du delete temp et delete buffer.
Donc tu deletes deux fois la même zone, et il aime pas.




Cette discussion est classée dans : buffer, char, fuite, mystring, buffer2


Répondre à ce message

Sujets en rapport avec ce message

Question sur les pointeurs [ par Darkneon ] Voici un programme tiree de "Simple C++"#include #include class Court{private: //attributes char * taille chaine de char [ par langedechu ] Salut , voila mon prob (je sais plus comment faire) :j'ai une variable : const char *buffer; et j aimerais savoir le nombre de caractere stocker dans Pb vector de vector de char ! [ par nicolas66 ] Ben g un pti pb avec ce prog en Cpp, à la compile ca passe mé à l'execution ca plante !! si vous savé pk merci d'avance !(c censé initialisé un buffer mon prog plante [ par lcampeur ] Voilà, j'ai un programme qui consiste a envoyer des fichiers quelconques sur des postes référencés précedemment. Je dois pouvoir envoyé plusieurs fich mon prog plante :-( [ par lcampeur ] Voilà, j'ai un programme qui consiste a envoyer des fichiers quelconques sur des postes référencés précedemment. Je dois pouvoir envoyé plusieurs fich Probleme Comparaison deux chaines de caracteres [ par Coxis ] Salut,Bon c pas compliqué j'ai 2 tableaux de caracteres de tailles differentes, je veux les comparer mais ca marche pas...En fait a la base je voulais question d'allocation probleme char char* Question simple [ par youpiyoyo ] voici mon probleme://///////////////////////////////////////////////////int rec = recv(ns,buffer,64*sizeof(char),0); buffer[rec] = '\0' ; //cout recv() et du brol [ par epoc ] hum... encore moi!g un petit prob avec la fonction recv() ou send(), je c pas trop.dans mon client j'ai ça :char *buffer = new char[1024];buffer="NEW Buffer sécurisé (pour les pros du C/C++) [ par jockos ] Peux t-on déclarer un buffer sécurisée en C/C++ ?J'entend par buffer sécurisé, un buffer (zone mémoire) alloué réelement en mémoire vive (RAM) et non strcat enfin pas tout a fait mais presque [ par yserver ] bonjours tout le monde et merci de lir mon poste merci pour toutes vos reponseEn fait le titres est pas tout a fait bon mais c'etait plsu cours le pb


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,484 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales