2012-04-30 5 views
0

Je rencontre un problème avec beaucoup de fuites de mémoire.Fuite de mémoire CRT C++

CRT montre une fuite dans le code suivant par exemple:

char *cmd = new char[128]; 

Que dois-je faire? J'ai commencé un nouveau projet avec VLD (Visual Leak Debugger) avec le code ci-dessus et il dit toujours que je fuis.

+0

Bien sûr, je supprime cette référence après tout – Hakon89

+0

appelez-vous 'delete []'? – EdChum

+1

@keety je pense supprimer [] * cmd –

Répondre

3

Fondamentalement, vous devez libérer de la mémoire dès que vous arrêtez de l'utiliser.

Certaines bonnes techniques C++ pour automatiser cela sont RAII et smart pointers.

Considérez également l'article de Wikipedia sur memory leaks.

+0

Merci je l'ai lu avant, mais toujours pas quel est le problème .. – Hakon89

+0

@ Hakon89 le problème est que la mémoire n'est pas récupérée dans le système. Vous devriez retourner les ressources que vous n'utilisez plus via l'opérateur 'delete', sinon votre programme et votre système d'exploitation se sentiront mal. – ulidtko

0

Vous devez appeler le delete[] arrayVariable; et non le delete arrayVariable; pour éviter les fuites de mémoire liées aux baies.

+0

Oui, je supprime [] au lieu de simplement supprimer – Hakon89

0

Il se peut que vos objets soient supprimés après l'exécution de la détection de fuite. Par exemple, si vous avez des objets statiques, vous devez faire attention à l'ordre de suppression afin que leur suppression se produise avant que la détection de fuite se produise. Essayez d'intégrer le nouveau/supprimer dans une fonction et voir si les fuites sont toujours signalées: sinon, le problème peut en effet être lié aux objets supprimés après que la détection de fuite a été exécutée.

0

utilisation:

std::vector<char> cmd(128); 

Chaque fois que vous avez besoin d'accéder au char * tampon que vous pouvez faire:

char* memory = &char[0] que la mémoire est garanti à continuer pour std :: vector. Pas besoin de supprimer car la mémoire est la propriété de l'objet. Cela rend votre code aussi une exception sûre, e, g, vous ne fuira pas la mémoire dans le cas où une exception est levée avant de faire la suppression []

Vous pouvez également utiliser le nouveau std :: array de C++ 11 aussi si vous voulez allouer sur la pile