Yggdrasil Seeds : Travaux du logiciel : Language Select : Denullpo, the pointer checker : Denullpo

Denullpo


Comme à usage minimum

Incluez denullpo.h dans chaque C/C++ source, mais il a besoin de cadres, autrement tous les macros dans le denullpo.h deviennent invalides.
Tout le cadre est écrit "#define" auparavant y compris denullpo.h.
DENULLPO_TRAP
Si cela est défini, le rappel de la découverte de l'erreur devient efficace.
DENULLPO_SKIP
Si cela est défini, Denullpo détecte des erreurs.
Si ni DENULLPO_TRAP ni DENULLPO_SKIP est défini, Denullpo ne détecte pas d'erreurs.
DENULLPO_4CC
C'est une valeur pour indiquer qu'un exemple est valide.
Si cela n'est pas défini, il est défini automatiquement à une valeur constante.
Na mancha que deveria conferir um ponteiro, dê em um ponteiro em denullpo().
Lorsqu'un chien d'arrêt est NULL, Denullpo traite une erreur résolue.
Sample Code
/*=== évitez l'accès à un chien d'arrêt NULL avec denullpo() ===*/
#include <stdio.h>
/*=== Denullpo a besoin de cadre auparavant y compris denullpo.h ===*/
/*=== Vous pouvez enlever manutention de Denullpo lorsque vous changez cette ligne dans commentaire. ===*/
#define DENULLPO_SKIP
#include "denullpo.h"

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

p=malloc(128);
/*=== divise le traitement par un résultat du chèque d'un chien d'arrêt ===*/
if(denullpo(p)){
/*=== traiter lorsque c'est anormal ===*/
fprintf(stderr,"this is nullpo\n");
err=1;
}
else{
/*=== traiter lorsque c'est normal ===*/
// :
// :
// :
free(p);
p=NULL;
}
return err;
}


Il examine la validité d'exemple

Denullpo peut examiner la validité d'exemple en ajoutant un membre pour un code magique à une classe et un corps de structure.
Classe et structure d'une cible du chèque définissent un point de l'écriture d'un code magique dans DENULLPO_INITCHECKER.
Quand l'a créé dans l'exemple, il indique cet exemple valide en appelant denullpo_setinit().
Et quand le détruit dans l'exemple, il indique cet exemple invalide en appelant denullpo_setpurge().
À la tache qui devrait vérifier un chien d'arrêt, donnez-le dans un chien d'arrêt dans le denullpo2().
Lorsqu'un chien d'arrêt est illégal, Denullpo traite une erreur résolue.
Sample Code
/*=== résistez à un appel de la méthode d'exemple illicite ===*/
#include <stdio.h>
#define DENULLPO_SKIP
#include "denullpo.h"

class FOO{
public:
/*=== définissez une variable pour remplir un cordon magique dans une classe ===*/
DENULLPO_INITCHECKER;

FOO(){
/*=== remplissez un cordon magique qui indique qu'il a initialisé ===*/
denullpo_setinit(this);
}

~FOO(){
/*=== remplissez un cordon magique qui indique qu'il a terminé ===*/
denullpo_setpurge(this);
}

void exec(){
/*=== traitez-le comme une erreur si cette méthode est appelée d'exceptez entre denullpo_setinit() et denullpo_setpurge() ===*/
if(denullpo2())return;
// :
// :
// :
}
};


Rappel de la découverte de l'erreur

le denullpo() et denullpo2() rendent habituellement immédiatement un résultat lorsqu'ils ont détecté une erreur.
Lorsque vous appelez denullpo_settrap() et rappel de l'ensemble, le rappel est appelé lorsque Denullpo a détecté une erreur, et le résultat est reflété.
DENULLPO_TRAP doit être défini auparavant y compris un denullpo.h pour valider le rappel.
Sample Code
/*=== rendez effectif erreur qui manie d'un chien d'arrêt illicite ===*/
#include <stdio.h>
/*=== configurer pour valider le rappel ===*/
#define DENULLPO_TRAP
#include "denullpo.h"

int err=0;

/*=== traiter lorsque Denullpo a détecté une erreur ===*/
static unsigned __cdecl hook(void *p,eDenullpoReason reason){
fprintf(stderr,"nullpo is hooked\n");
err=1;

/*=== la valeur revenant devient juste renvoyer de la valeur de denullpo() ===*/
return 1;
}

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

/*=== mettre de rappel ===*/
denullpo_settrap(hook);

p=malloc(128);
/*=== Si un chien d'arrêt est NULL, Denullpo exécutent le rappel résolu. ===*/
if(!denullpo(p)){
/*=== traiter lorsque c'est normal ===*/
// :
// :
// :
free(p);
p=NULL;
}
return err;
}


Détails

Définitions

eDenullpoReason
Info de l'erreur du chien d'arrêt de rappel hDenullpoTrap.
DENULLPO_NULL
Le chien d'arrêt examiné est NULL.
DENULLPO_INVALID
L'exemple examiné est invalide.

Types de rappel

unsigned (*hDenullpoTrap)(void* p, eDenullpoReason reason)
Rappel lorsque l'erreur est détectée.
Lorsqu'une erreur a été détectée, un ensemble de la fonction dans le denullpo_settrap() est appelé.
Discussions
p
chien d'arrêt d'une cible de l'examen
reason
base d'une erreur
Revenant valeur
0
Ce facteur de l'erreur a été résolu.
1
Ce facteur de l'erreur est encore laissé.

Fonctions

hDenullpoTrap denullpo_gettrap()
obtenir un rappel de la découverte de l'erreur.
Revenant valeur
la valeur du cadre
hDenullpoTrap denullpo_settrap(hDenullpoTrap trap)
mettez un rappel de la découverte de l'erreur.
Discussions
trap
une fonction traiter comme rappel
Revenant valeur
la dernière valeur du cadre
Notes
Cette fonction n'est pas fil sûr.
unsigned denullpo_exectrap(void* p, eDenullpoReason reason)
appelez le rappel de la découverte de l'erreur.
Discussions
p
chien d'arrêt d'une cible de l'examen
reason
base d'une erreur
Revenant valeur
0
Ce facteur de l'erreur a été résolu.
1
Ce facteur de l'erreur est encore laissé.
unsigned denullpo_getinit(any* p)
obtenir une valeur de contrôleur de l'exemple
Discussions
p
visez l'exemple
Revenant valeur
valeur de contrôleur de l'exemple
void denullpo_setinit(any* p)
notifiez contrôleur de l'exemple que l'exemple est initialisé
Discussions
p
visez l'exemple
Notes
Vous devez appeler ce macro pour chaque exemple pour devenir une cible de denullpo2().
void denullpo_setpurge(any* p)
notifiez contrôleur de l'exemple que l'exemple est terminé
Discussions
p
visez l'exemple
Notes
Vous devez appeler ce macro pour chaque exemple pour devenir une cible de denullpo2().
unsigned denullpo_chkinit(any* p)
examinez si l'exemple est initialisé
Discussions
p
visez l'exemple
Revenant valeur
0
pas caractère anormal
1
caractère anormal
Notes
Vous n'appelez pas habituellement directement ce macro. Vous appelez denullpo2() afin que Denullpo examine l'exemple.
int denullpo(any* p)
examinez si un chien d'arrêt est NULL
Discussions
p
visez le chien d'arrêt
Revenant valeur
0
NULL n'a pas été détecté
1
NULL a été détecté
Notes
La fonction du rappel est appelée en cas de la découverte de l'erreur si a mis par une fonction du rappel dans le denullpo_settrap().
int denullpo2(any* p)
examinez si un exemple est invalide
Discussions
p
visez l'exemple
Revenant valeur
0
pas caractère anormal
1
caractère anormal
Notes
La fonction du rappel est appelée en cas de la découverte de l'erreur si a mis par une fonction du rappel dans le denullpo_settrap().
Vous devez appeler denullpo_setinit() et denullpo_setpurge() à une place appropriée afin que cette fonction soit maniée normalement.

Futur plan


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