Memleak



  • Hi leute.

    Habt ihr eine Idee warum nach ausführen von folgendem code memory leaks entstehen?

    {
        // CMemFile memfile
        // int datasize
    
        BYTE detachedBuffer[1024];
        memcpy(&detachedBuffer[0],&datasize,sizeof(datasize));
        memcpy(&detachedBuffer[4],memfile.Detach(),datasize);
    }
    

    Vielen dank im voraus!

    cheers,
    Mike



  • Vermutlich weil Detach() den vom Memfile verwalteten Speicherblock in deine Verantwortung übergeben hat - das heißt, du bist auch dafür verantwortlich den Speicher freizugeben.



  • Vermutlich weil Detach() den vom Memfile verwalteten Speicherblock in deine Verantwortung übergeben hat - das heißt, du bist auch dafür verantwortlich den Speicher freizugeben.

    der speicher wird doch dem BYTE objekt übergeben und sollte doch beim "}" wieder freigegeben werden oder?

    das ::Detach() führt auch ein ::Close() des memfile objekts aus.
    Urspürnglich erhielt ich auch keine memleaks, erst seitdem ich diese zeile hinzugefügt habe.

    memcpy(&detachedBuffer[0],&datasize,sizeof(datasize));
    

    cheers,
    mike



  • yeah so funzt jetzt

    {
    
        BYTE detachedBuffer[1024];
        BYTE* pB = memfile.Detach();
        memcpy(&detachedBuffer[0],&datasize,sizeof(datasize));
        memcpy(&detachedBuffer[4],pB,datasize);
        free(pB);
    }
    

    danke das mit dem detach/buffer war die lösung!

    cheers,
    mike


Anmelden zum Antworten