Ik heb een applicatie geschreven die een aantal plugin DLL's inlaadt en vervolgens functies uit deze DLL's aanroept. Iedere DLL heeft dezelfde interface.
De pointers naar de verschillende DLL functies staan in een structure, en hiervan heb ik een map gemaakt map<string, interfaceStruct> waarmee ik de naam van de DLL aan zijn functies heb gekoppeld.
Alles werkt voorbeeldig, maar vandaag merkte ik dat mijn PC wat traag begon te worden nadat de applicatie een tijdje actief was. Uit onderzoek bleek dat de applicatie zo'n slordige 2MB per seconde lekt.
Het exacte lekpunt heb ik gevonden, het gaat om een aanroep van een functie met de volgende signature:
De functie die wordt aangeroepen vult netjes de gegevens in (hardcoded)
Voor zover ik kan zien zou dit geen geheugen mogen lekken, en ik ben al een hele dag aan het zoeken waar het aan kan liggen. Ik heb diverse manieren geprobeerd om meer informatie over het lek te krijgen, maar ik kan gewoon niets vinden. Waarschijnlijk is het iets heel eenvoudigs, maar ik zie het gewoon niet.
[edit]
Het blijkt dat de overige functies ook lekken.
Ik kwam al iets tegen over het HEAP gebruik van DLL's en applicaties. Maar mijn functie maakt toch geen objecten aan op de HEAP?).
help!
De pointers naar de verschillende DLL functies staan in een structure, en hiervan heb ik een map gemaakt map<string, interfaceStruct> waarmee ik de naam van de DLL aan zijn functies heb gekoppeld.
Alles werkt voorbeeldig, maar vandaag merkte ik dat mijn PC wat traag begon te worden nadat de applicatie een tijdje actief was. Uit onderzoek bleek dat de applicatie zo'n slordige 2MB per seconde lekt.
Het exacte lekpunt heb ik gevonden, het gaat om een aanroep van een functie met de volgende signature:
code:
1
2
3
4
5
6
7
8
9
10
| void functie(infoStruct)
waarbij infoStruct
typedef struct
{
string naam;
bool input;
bool output;
} infoStruct |
De functie die wordt aangeroepen vult netjes de gegevens in (hardcoded)
code:
1
2
3
4
5
6
| void functie(infoStruct &info)
{
info.naam="naam";
info.input=false;
info.output=true;
} |
Voor zover ik kan zien zou dit geen geheugen mogen lekken, en ik ben al een hele dag aan het zoeken waar het aan kan liggen. Ik heb diverse manieren geprobeerd om meer informatie over het lek te krijgen, maar ik kan gewoon niets vinden. Waarschijnlijk is het iets heel eenvoudigs, maar ik zie het gewoon niet.
[edit]
Het blijkt dat de overige functies ook lekken.
Ik kwam al iets tegen over het HEAP gebruik van DLL's en applicaties. Maar mijn functie maakt toch geen objecten aan op de HEAP?).
help!
[ Voor 9% gewijzigd door koffercomputer op 23-08-2005 14:20 ]
Ik heb het opgegeven om nog correct Nederlands te blijven typen. 22.10.02