Bonjour,
je vous explique mon problème, je dois reprendre un logiciel et y ajouter des fonctionnalités. J'ai voulu vérifier avec codeguard si le programme était safe au niveau des fuites mémoires et j'ai trouvé un problème dans la fonction suivante :
C'est ce
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 AnsiString * Hdw_CBaseFile::split(AnsiString chaine,unsigned char separateur, unsigned int * taille) { /* On compte les séparateurs */ int nbSep = 0; for(int i=1;i<=chaine.Length();i++) if(chaine[i]==separateur) nbSep++; /** On créé le tableau de la taille appropriée */ (*taille) = nbSep+1; AnsiString * result = new AnsiString[(*taille)]; /** On récupère les différentes sous-chaines */ int index = 0; AnsiString temp = ""; for(int i=1;i<=chaine.Length();i++) if(chaine[i]==separateur) { result[index] = temp; temp = ""; index++; } else temp += chaine.SubString(i,1); result[index] = temp; return result; }qui pose problème mais je ne vois pas comment supprimer ce tableau car la zone mémoire est utilisée par une autre fonction avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part new AnsiString[(*taille)];
j'ai essayé pas mal de choses et je ne vois pas comment éviter cette fuite...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 short int Hdw_CCsvDBFile::readData( Hdw_SCsvDBData * data, unsigned int index ) { AnsiString temp; if( (temp=pFile->ReadString("Files",(AnsiString)index,"x"))=="x") return ERROR_READ_CSVDB_DATA; unsigned int nbDonnees; AnsiString * donnees = split(temp,';',&nbDonnees); if( nbDonnees<6 ) return ERROR_READ_CSVDB_DATA; try { data->Fichier = donnees[1]; data->Description = donnees[2]; data->Type = donnees[3].ToInt(); data->Firmware = donnees[4].ToInt(); data->Categorie = donnees[5].ToInt(); } catch(Exception & ex) { return ERROR_READ_CSVDB_DATA; } return RESULT_OK; }
Je suis ouvert à toutes vos remarques !!
Partager