C6308

Aktualisiert: November 2007

C6308

Warnung C6308: 'realloc' gibt möglicherweise einen NULL-Zeiger zurück: Das Zuweisen eines NULL-Zeigers zu <Variable>, das als Argument an 'realloc' übergeben wird, führt zu einem Verlust im ursprünglichen Speicherblock.

Diese Warnung weist auf einen Speicherverlust hin, der auf eine falsche Verwendung einer Funktion zur Neuzuordnung zurückzuführen ist. Funktionen zur Neuzuordnung von Heaps geben den übergebenen Puffer nicht frei, wenn die Neuzuordnung fehlschlägt. Um den Fehler zu beheben, weisen Sie das Ergebnis der Funktion zur Neuzuordnung einer temporären Variablen zu und ersetzen dann den ursprünglichen Zeiger nach der erfolgreichen Neuzuordnung.

Beispiel

Im folgenden Beispielcode wird diese Warnung generiert:

#include <malloc.h>
#include <windows.h>

void f( )
{
  char *x;
  x = (char *) malloc(10);
  if (x != NULL)
  {
    x = (char *) realloc(x, 512);
    // code...
    free(x);
  }   
}

So korrigieren Sie die Warnung unter Verwendung des folgenden Codes

#include <malloc.h>
#include <windows.h>

void f()
{
  char *x, *tmp;

  x = (char *) malloc(10);

  if (x != NULL)
  {
    tmp = (char *) realloc(x,512);
    if (tmp != NULL) 
    {
      x = tmp;
    }
    free(x);
  }
}

Diese Warnung kann möglicherweise verwirrend sein, wenn zum Zeitpunkt der Zuweisung des Ergebnisses der Funktion zur Neuzuordnung ein Livealias für den Puffer vorhanden ist, der neu zugeordnet werden soll.