BackupRead - memleak



  • Hallo zusammen

    Ich habe ein Problem mit der Funktion BackupRead();

    HANDLE hStream=0;
      int iRc=0;
      int iContext=0;
      int iRead=0;
      WIN32_STREAM_ID sid;
      char caBuffer[350];
    
      hStream = CreateFile(caBuffer,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,0);
      if(hStream==NULL)
      {
        return(0);
      }
    
      iRc= BackupRead(hStream,(LPBYTE)&sid,sizeof(WIN32_STREAM_ID),
                      (LPDWORD)&iRead,0,0,(LPVOID)&iContext);
      CloseHandle(hStream);
    

    Ich rufe diesen Codeteil (Ausschnitt aus einer Funktion) ~0.5Mio mal auf.
    Nun habe ich bemerkt dass die Funktion BackupRead() bei jedem Aufruf Speicher reserviert und nicht mehr frei gibt. Das führt mit der Zeit zu einem Crash...

    Kann mir jemand einen Tipp geben was ich Falsch mache?
    Gruss Binggi



  • Der Code ist nur sehr unvollständig... so kann das wirklich nicht geschrieben sein...
    Auch hast Du hier so viele casts drin, dass es mir ganz schwindelig wird...

    Falls der Fehler bei einem "sauberen" Code auch noch auftritt, solltest Du Dich an den MS-Support wenden (wenn Du eine MSDN-Subscription hast, hast Du auch einige Anfragen frei); bei einem Fehler von seitens MS ist die Anfrage sowieso kostenfrei...

    Aber ich würde zuerst mal den Code bereinigen...

    PS: Aus der Doku kann man auch erkennen, dass Du die Methode *falsch* aufrufst!

    nNumberOfBytesToRead:
    Length of the buffer, in bytes. The buffer size must be greater than the size of a WIN32_STREAM_ID structure.

    Auch solltest Du Dich mal mit dem "bAbort" auseinander setzen; daher rührt vermutlich *Dein* Speicherleck...



  • Bin nun dem Fehler auf die schliche gekommen...

    if(hStream==NULL)
    

    If the function fails, the return value is INVALID_HANDLE_VALUE.

    Wenn nun BackupRead mit einem ungültigen Filehandel aufgerufen wird, hat er Speicher reserviert, der nicht mehr freigegeben werden konnte.


Anmelden zum Antworten