_heapset
Nach oben zu alloc.h - Index
Header-Datei
malloc.h
Kategorie
Speicherroutinen
Prototyp
int _heapset(unsigned int fillvalue);
Beschreibung
Füllt die freien Blöcke auf dem Heap-Speicher mit einem konstanten Wert.
_heapset überprüft auf die gleiche Weise wie _heapchk, ob der Heap konsistent ist. Anschließend wird in jeden freien Heap-Block der Wert aus dem niederwertigen Byte von fillvalue eingetragen. Diese Funktionen kann eingesetzt werden, um Probleme mit dem Heap-Speicher aufzuspüren. Sie garantiert nicht, dass nachfolgend zugewiesene Blöcke mit dem angegebenen Wert gefüllt werden.
Rückgabewert
Einer der folgenden Werte:
_HEAPOK |
Der Heap ist anscheinend nicht beschädigt. |
_HEAPEMPTY |
Es ist kein Heap-Speicher vorhanden. |
_HEAPBADNODE |
Es wurde ein beschädigter Heap-Block gefunden. |
Beispiel
#include <windowsx.h>
#include <malloc.h>
#include <stdio.h>
#include <stdlib.h>
BOOL InitApplication(HINSTANCE hInstance);
HWND InitInstance(HINSTANCE hInstance, int nCmdShow);
LRESULT FAR PASCAL _export MainWndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
void ExampleHeapSet(HWND hWnd);
#pragma argsused
int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg; // Meldung
if (!InitApplication(hInstance)) // Gemeinsam genutzte Elemente initialisieren
return (FALSE); // Beenden, wenn Initialisierung nicht möglich ist
/* Initialisierungen durchführen, die für eine bestimmte Instanz gelten */
if (!(InitInstance(hInstance, nCmdShow)))
return (FALSE);
/* Meldungen abrufen und verteilen, bis die Meldung WM_QUIT empfangen wird. */
while (GetMessage(&msg, // Meldungsstruktur
NULL, // Handle des Fensters, das die Meldung empfängt
NULL, // Unterste zu überprüfende Meldung
NULL)) // Höchste zu überprüfende Meldung
{
TranslateMessage(&msg); // Übersetzt virtuelle Tastaturcodes
DispatchMessage(&msg); // Leitet die Meldung an das Fenster weiter
}
return (msg.wParam); // Gibt den Wert von PostQuitMessage zurück
}
BOOL InitApplication(HINSTANCE hInstance)
{
WNDCLASS wc;
// Struktur WNDCLASS mit Parametern füllen, die das
// Hauptfenster beschreiben.
wc.style = CS_HREDRAW | CS_VREDRAW; // Fensterklassenstil(e).
wc.lpfnWndProc = (long (FAR PASCAL*)(void *,unsigned int,unsigned int, long ))MainWndProc; // Funktion, die Meldungen für Fenster
// dieser Klasse abrufen soll.
wc.cbClsExtra = 0; // Keine klassenspezifischen zusätzlichen Daten.
wc.cbWndExtra = 0; // Keine fensterspezifischen zusätzlichen Daten.
wc.hInstance = hInstance; // Anwendung, die Besitzer der Klasse ist.
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = GetStockObject(WHITE_BRUSH);
wc.lpszMenuName = NULL; // Name der Menüressource in der .RC-Datei.
wc.lpszClassName = "Example"; // Name, der im Aufruf von CreateWindow benutzt wird.
/* Fensterklasse registrieren und Erfolgs-/Fehlercode zurückgeben. */
return (RegisterClass(&wc));
}
HWND InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd; // Handle des Hauptfensters
/* Ein Hauptfenster für diese Anwendungsinstanz erstellen. */
hWnd = CreateWindow(
"Example", // Siehe Aufruf von RegisterClass()
"Example _heapset 32 bit only", // Text für die Titelleiste des Fensters
WS_OVERLAPPEDWINDOW, // Fensterstil
CW_USEDEFAULT, // Voreingestellte horizontale Position
CW_USEDEFAULT, // Voreingestellte vertikale Position
CW_USEDEFAULT, // Standardbreite
CW_USEDEFAULT, // Standardhöhe
NULL, // Bei sich überlappenden Fenstern ist kein Fenster übergeordnet.
NULL, // Fensterklassenmenü verwenden
hInstance, // Diese Instanz ist Besitzer dieses Fensters.
NULL // Es wird kein Zeiger benötigt.
);
/* Wenn das Fenster nicht erstellt werden konnte, "failure" zurückgeben. */
if (!hWnd)
return (FALSE);
/* Fenster sichtbar machen, dessen Clientbereich aktualisieren und "success" zurückgeben */
ShowWindow(hWnd, nCmdShow); // Fenster anzeigen
UpdateWindow(hWnd); // Sendet WM_PAINT-Meldung
return (hWnd); // Gibt den Wert von PostQuitMessage zurück.
}
void ExampleHeapSet(HWND hWnd)
{
int hsts;
char *buffer;
if ( (buffer = (char *)malloc( 1 )) == NULL )
exit(0);
hsts = _heapset( 'Z' );
switch (hsts)
{
case _HEAPOK:
MessageBox(hWnd,"Heap is OK","Heap",MB_OK|MB_ICONINFORMATION);
break;
case _HEAPEMPTY:
MessageBox(hWnd,"Heap is empty","Heap",MB_OK|MB_ICONINFORMATION);
break;
case _HEAPBADNODE:
MessageBox(hWnd,"Bad node in heap","Heap",MB_OK|MB_ICONINFORMATION);
break;
default :
break;
}
free (buffer);
}
#pragma argsused
LRESULT FAR PASCAL _export MainWndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message) {
case WM_CREATE:
{
//Beispiel für _heapset
ExampleHeapSet(hWnd);
return NULL;
}
case WM_QUIT:
case WM_DESTROY: // Meldung: Fenster wird gelöscht
PostQuitMessage(0);
break;
default : // Weitergeben, wenn sie nicht verarbeitet wurde
return (DefWindowProc(hWnd, message, wParam, lParam));
}
}
Portabilität
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |