Yggdrasil Seeds : Software funktioniert : Language Select : Denullpo, the pointer checker : Denullpo

Denullpo


Wie zu Mindestverwendung

Schließen Sie denullpo.h in jeden C/C++-Quelle ein, aber es braucht Rahmen, ansonsten werden alle Makros in denullpo.h ungültig.
In aller Rahmen wird geschrieben "#define" vor einschließlich des denullpo.h.
DENULLPO_TRAP
Wenn dies definiert wird, wird Fehlerentdeckung-callback wirksam.
DENULLPO_SKIP
Wenn dies definiert wird, bemerkt Denullpo Fehler.
Wenn weder DENULLPO_TRAP noch DENULLPO_SKIP definiert wird, bemerkt Denullpo keine Fehler.
DENULLPO_4CC
Es ist ein Wert zu zeigen, daß ein Beispiel gültig ist.
Wenn dies nicht definiert wird, wird es automatisch zu einem beständigen Wert definiert.
Bei der Stelle, die einen Zeiger überprüfen sollte, geben Sie es in einem Zeiger in denullpo().
Wenn ein Zeiger NULL ist, verarbeitet Denullpo einen fertigen Fehler.
Sample Code
/*=== weichen Sie Zugang zu einem NULL Zeiger mit denullpo() aus ===*/
#include <stdio.h>
/*=== Denullpo braucht vorher einschließlich des denullpo.h Rahmen ===*/
/*=== Sie können Behandlung durch Denullpo entfernen, wenn Sie diese Linie in Kommentar verändern. ===*/
#define DENULLPO_SKIP
#include "denullpo.h"

int main(int argc,char *argv[]){
void* p=NULL;
int err=0;

p=malloc(128);
/*=== Klüfte, die durch ein Scheckergebnis eines Zeigers marschieren ===*/
if(denullpo(p)){
/*=== marschierend, wenn es abnormal ist ===*/
fprintf(stderr,"this is nullpo\n");
err=1;
}
else{
/*=== marschierend, wenn es normal ist ===*/
// :
// :
// :
free(p);
p=NULL;
}
return err;
}


Es untersucht die Rechtsgültigkeit des Beispieles

Denullpo kann die Rechtsgültigkeit des Beispieles untersuchen, indem sie einer Klasse und einem Strukturkörper für einen magischen Code ein Mitglied hinzufügen.
Klasse und Struktur eines Scheckzieles definieren in DENULLPO_INITCHECKER einen Schreibenpunkt eines magischen Codes.
Als es es in Beispiel geschaffen wird, weist es auf dieses gültige Beispiel hin, indem es denullpo_setinit() ruft.
Und wenn zerstört es in Beispiel, es weist auf dieses ungültige Beispiel hin, indem es denullpo_setpurge() ruft.
Bei der Stelle, die einen Zeiger überprüfen sollte, geben Sie es in einem Zeiger in denullpo2().
Wenn ein Zeiger illegal ist, verarbeitet Denullpo einen fertigen Fehler.
Sample Code
/*=== widersetzen Sie sich einem Methodenanruf von verbotenem Beispiel ===*/
#include <stdio.h>
#define DENULLPO_SKIP
#include "denullpo.h"

class FOO{
public:
/*=== definieren Sie eine Variable, um in einer Klasse eine magische Schnur auszufüllen ===*/
DENULLPO_INITCHECKER;

FOO(){
/*=== füllen Sie eine magische Schnur aus, die zeigt, daß es initialisierte ===*/
denullpo_setinit(this);
}

~FOO(){
/*=== füllen Sie eine magische Schnur aus, die zeigt, daß es endete ===*/
denullpo_setpurge(this);
}

void exec(){
/*=== behandeln Sie es als ein Fehler, wenn diese Methode von außer zwischen denullpo_setinit() und denullpo_setpurge() gerufen wird ===*/
if(denullpo2())return;
// :
// :
// :
}
};


Fehlerentdeckung-callback

denullpo() und denullpo2() geben normalerweise sofort ein Ergebnis zurück, als sie einen Fehler bemerkten.
Wenn Sie denullpo_settrap() und fertigen callback rufen, wird callback gerufen, als Denullpo einen Fehler bemerkte, und das Ergebnis wird reflektiert.
DENULLPO_TRAP muß vorher einschließlich eines denullpo.h definiert werden, um callback zu bestätigen.
Sample Code
/*=== Gerätefehlerbehandlung durch einen verbotenen Zeiger ===*/
#include <stdio.h>
/*=== das Setzen, um callback zu bestätigen ===*/
#define DENULLPO_TRAP
#include "denullpo.h"

int err=0;

/*=== marschierend, als Denullpo einen Fehler bemerkte ===*/
static unsigned __cdecl hook(void *p,eDenullpoReason reason){
fprintf(stderr,"nullpo is hooked\n");
err=1;

/*=== zurückkommender Wert wird nur zurückkommender Wert von denullpo() ===*/
return 1;
}

int main(int argc,char *argv[]){
void* p=NULL;

/*=== das Setzen von callback ===*/
denullpo_settrap(hook);

p=malloc(128);
/*=== Wenn ein Zeiger NULL ist, führt Denullpo fertigen callback aus. ===*/
if(!denullpo(p)){
/*=== marschierend, wenn es normal ist ===*/
// :
// :
// :
free(p);
p=NULL;
}
return err;
}


Details

Definitionen

eDenullpoReason
Zeigerfehlerinfo von hDenullpoTrap callback.
DENULLPO_NULL
Untersuchter Zeiger ist NULL.
DENULLPO_INVALID
Untersuchtes Beispiel ist ungültig.

Callback tippt

unsigned (*hDenullpoTrap)(void* p, eDenullpoReason reason)
Callback, wenn Fehler bemerkt wird.
Als ein Fehler bemerkt wurde, wird eine in denullpo_settrap() feste Funktion gerufen.
Argumente
p
Zeiger eines Prüfungszieles
reason
Basis eines Fehlers
Das Zurückgeben von Wert
0
Dieser Fehlerfaktor wurde gelöst.
1
Dieser Fehlerfaktor wird immer noch verlassen.

Funktionen

hDenullpoTrap denullpo_gettrap()
bekommen Sie einen Fehlerentdeckung-callback.
Das Zurückgeben von Wert
der Rahmenwert
hDenullpoTrap denullpo_settrap(hDenullpoTrap trap)
setzen Sie einen Fehlerentdeckung-callback.
Argumente
trap
eine Funktion, als callback zu verhandeln
Das Zurückgeben von Wert
der letzte Rahmenwert
Notizen
Diese Funktion ist, fädeln Sie keinen Safe ein.
unsigned denullpo_exectrap(void* p, eDenullpoReason reason)
rufen Sie den Fehlerentdeckung-callback.
Argumente
p
Zeiger eines Prüfungszieles
reason
Basis eines Fehlers
Das Zurückgeben von Wert
0
Dieser Fehlerfaktor wurde gelöst.
1
Dieser Fehlerfaktor wird immer noch verlassen.
unsigned denullpo_getinit(any* p)
bekommen Sie einen Wert des Beispielsprüfers
Argumente
p
zielen Sie auf Beispiel ab
Das Zurückgeben von Wert
Wert des Beispielsprüfers
void denullpo_setinit(any* p)
benachrichtigen Sie Beispielsprüfer, daß Beispiel initialisiert wird
Argumente
p
zielen Sie auf Beispiel ab
Notizen
Sie müssen dieses Makro jedes Beispiel verlangen, um ein Ziel von denullpo2() zu werden.
void denullpo_setpurge(any* p)
benachrichtigen Sie Beispielsprüfer, daß Beispiel beendet wird
Argumente
p
zielen Sie auf Beispiel ab
Notizen
Sie müssen dieses Makro jedes Beispiel verlangen, um ein Ziel von denullpo2() zu werden.
unsigned denullpo_chkinit(any* p)
untersuchen Sie, ob Beispiel initialisiert wird
Argumente
p
zielen Sie auf Beispiel ab
Das Zurückgeben von Wert
0
nicht Anomalie
1
Anomalie
Notizen
Sie rufen normalerweise nicht direkt dieses Makro. Sie rufen denullpo2(), damit Denullpo Beispiel untersucht.
int denullpo(any* p)
untersuchen Sie, ob ein Zeiger NULL ist
Argumente
p
zielen Sie auf Zeiger ab
Das Zurückgeben von Wert
0
NULL wurde nicht bemerkt
1
NULL wurde bemerkt
Notizen
Die callback-Funktion wird bei der Fehlerentdeckung gerufen, ob es von einer callback-Funktion in denullpo_settrap() gesetzt wird.
int denullpo2(any* p)
untersuchen Sie, ob ein Beispiel ungültig ist
Argumente
p
zielen Sie auf Beispiel ab
Das Zurückgeben von Wert
0
nicht Anomalie
1
Anomalie
Notizen
Die callback-Funktion wird bei der Fehlerentdeckung gerufen, ob es von einer callback-Funktion in denullpo_settrap() gesetzt wird.
Sie müssen denullpo_setinit() und denullpo_setpurge() bei einer geeigneten Position rufen, damit diese Funktion normalerweise gehandhabt wird.

Künftiger Plan


DSHs PHPlib v0.1.0 (C)2006-9 Denullpo Smasher Hammerson