_freea
Gibt gemeinsam oder gibt einen Speicherblock frei.
void _freea(
void *memblock
);
Parameter
- memblock
Zuvor reservierter Speicherblock freigegeben werden sollen.
Rückgabewert
Keine.
Hinweise
Die _freeaFunktion gibt einen Speicherblock frei ()memblockvorher durch einen Aufruf von _mallocazugeordnet wurde._freea Überprüft, ob der Arbeitsspeicher auf dem Heap oder dem Stapel belegt wurde.Wenn es auf dem Stapel reserviert wurde, bleibt _freea nichts.Wenn es auf dem Heap reserviert wurde, ist die Anzahl der freigegebenen Bytes und der Anzahl der angeforderten Bytes sein, als der Block zugeordnet wurde.Wenn memblockNULList, wird der Zeiger ignoriert und _freea wird sofort zurückgegeben.Der Versuch, einen ungültigen Zeiger (einen Zeiger auf einen Speicherblock, der nicht durch _mallocabelegt wurde) freizugeben folgenden Anforderungen beeinflussen, und Zuordnungen können Fehler verursacht hat.
_freeafree ruft intern auf, wenn es findet, dass der Arbeitsspeicher auf dem Heap zugeordnet ist.Ob der Arbeitsspeicher auf dem Heap oder dem Stapel ist, wird von einem Marker bestimmt, der an der Adresse im Speicher direkt vor dem reservierten Speicher abgelegt wird.
Wenn ein Fehler auftritt, wenn er den Speicher freigibt, ist errno mit Informationen aus dem Betriebssystem auf der Art des Fehlers festgelegt.Weitere Informationen finden Sie unter errno, _doserrno, _sys_errlist und _sys_nerr.
Nachdem ein Speicherblock freigegeben wurde, minimiert _heapmin die Menge des freien Arbeitsspeichers auf dem Heap, indem Sie die nicht verwendeten Bereiche verschmilzt und sie wieder an das Betriebssystem freigegeben wird.Freigegebener Speicher, der nicht für das Betriebssystem freigegeben wird, wird das Freigeben Pool wiederhergestellt und zur Zuordnung wieder verfügbar.
Ein Aufruf von _freea muss alle Aufrufe _mallocaVerfügung.Es kann auch ein Fehler, um Arbeitsspeicher auf demselben _freea zweimal aufruft.Wenn die Anwendung mit einer Debugversion der C-Laufzeitbibliotheken verknüpft ist, insbesondere bei aktiviertem _malloc_dbg-Funktionen durch die Definition von _CRTDBG_MAP_ALLOC, ist es einfacher, fehlende oder doppelte _freeaAufrufe zu suchen.Weitere Informationen darüber, wie der Heap während des Debuggens Prozesses verwaltet wird, finden Sie unter Der CRT-Debugheap.
_freea ist als __declspec(noalias)und bedeutet, dass die Funktion nicht garantiert globale Variablen zu ändern.Weitere Informationen finden Sie unter noalias.
Anforderungen
Funktion |
Erforderlicher Header |
---|---|
_freea |
<stdlib.h> und <malloc.h> |
Weitere Informationen finden Sie unter Kompatibilität Kompatibilität in der Einführung.
Beispiel
Weitere Informationen finden Sie im Beispiel für _malloca.
.NET Framework-Entsprechung
Nicht zutreffend. Um die Standard-C-Funktion aufzurufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Plattformaufruf-Beispiele.