MFC : comment delete le buffer apres avoir Read un CFile ?

MFC : comment delete le buffer apres avoir Read un CFile ? - C++ - Programmation

Marsh Posté le 30-07-2004 à 10:43:54    

Voila jai mon appli qui lit un fichier, mon probleme est que quand jutilise Read pour mettre dans un buffer l'interieur du fichier...je ne peux pas le free sinon segfault :p
 
Voila mon code :

Code :
  1. CFile myFile(hFile);
  2. int dwLength = (int)myFile.GetLength();
  3. char *buffer = new char[dwLength];
  4. DWORD dwRead;
  5. dwRead = myFile.Read(buffer, dwLength);
  6. buffer[dwLength] = 0;
  7. [...] //je parse mon buffer pour chopper ce que je veux...etc
  8. myFile.Close();
  9. delete buffer; // <= C'est la ou ca casse :)
  10. //Fin de ma fonction (je me sert plus de buffer.)


 
Sur msdn les exemples donnés sont sans les delete et mon probleme est qu'a chaque fois que je quitte mon programme il me fait un :
Detected memory leaks!...etc
 
Je sens la connerie toute bete...mais javoue que je ne voie pas ou ca foire :)
 
 
Merci pour l'aide :)


Message édité par flou1 le 30-07-2004 à 11:06:25
Reply

Marsh Posté le 30-07-2004 à 10:43:54   

Reply

Marsh Posté le 30-07-2004 à 11:29:53    

si c'est un new[], alors il faut faire un delete []

Reply

Marsh Posté le 30-07-2004 à 11:36:55    

J'avais deja testé avec le [], et ca me fait la meme chose :(

Reply

Marsh Posté le 04-08-2004 à 21:49:37    

Hep !!!  
 
l'erreur est ici :
buffer[dwLength] = 0;  
 
si tu alloue un tableau de x elements, l'indice peut varier de 0 à x-1 !

Reply

Marsh Posté le 04-08-2004 à 21:53:29    

si tu as peur des fuites, tu peux utiliser std::vector<char>
 
 

Code :
  1. CFile myFile(hFile);
  2.    int dwLength = (int)myFile.GetLength();
  3.    std::vector<char> buffer(dwLength + 1);
  4.  
  5.    DWORD dwRead;
  6.    dwRead = myFile.Read(buffer.begin(), dwLength);
  7.    buffer[dwRead] = 0; // petite faute
  8.    
  9.    [...] //je parse mon buffer pour chopper ce que je veux...etc
  10.    
  11.    myFile.Close();
  12.    // plus rien à faire

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed