_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++ |
|---|---|---|---|
|
+ |