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
- DENULLPO_NULL
- Untersuchter Zeiger ist NULL.
- DENULLPO_INVALID
- Untersuchtes Beispiel ist ungültig.
Callback tippt
Callback, wenn Fehler bemerkt wird.
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
bekommen Sie einen Fehlerentdeckung-callback.
Das Zurückgeben von Wert
setzen Sie einen Fehlerentdeckung-callback.
Argumente
trap | eine Funktion, als callback zu verhandeln |
Das Zurückgeben von Wert
Notizen
Diese Funktion ist, fädeln Sie keinen Safe ein.
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.
DSHs PHPlib v0.1.0 (C)2006-9 Denullpo Smasher Hammerson