Bonjour à tous,
j'ai un mémory leak dont ne parviens pas à me débarrasser:
Je n'arrive pas à le localiser car le #d'allocation (ici 16050) n'est jamais le même d'une exécution à l'autre.Detected memory leaks!
Dumping objects ->
{16050} client block at 0x013DF5E0, subtype c0, 16 bytes long.
First-chance exception at 0x7c809eec in TestIndex_d.exe: 0xC0000005: Access violation reading location 0x0135201c.
an invalid object at $013DF5E0, 16 bytes long
Le plus énervant, c'est que je pense être parvenu à trouver le bout de code qui génère cette fuite, car si j'enlève ce bout de code, je n'ai plus de fuite. Mais peut-être est-ce "l'arbre qui cache la forêt"? Car ce bout de code est simple:
Si je rajoute SAFE_DELETE(b) avant SAFE_DELETE(a), ça plante.
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 MaMethode() { switch: [...] case 1: ObjetA *a; while ( (a= m_maFIFO.Get()) ) { ObjetB *b= (ObjetB*) a->GetB(); // ici, un appel de fonction qui utilise les membres de b (uniquement des int => pas de buffer, ni char*, ni pointeur de façon générale): f(b->membre1, b->membre2); SAFE_DELETE(a); } break; [...] }
Je ne comprends pas trop ce qu'il se passe ici. Peut-être y a-t-il un rapport avec le switch?
Partager