2010-10-12 10 views

Répondre

6

Je ne peux trouver ValidateReadPtr() macro dans l'en-tête wxdebug.h pour le SDK Windows Mobile (même si MSDN indique que cela fait partie des API DirectShow).

Dans wxdebug.h il est défini comme:

#define ValidateReadPtr(p,cb) \ 
    {if(IsBadReadPtr((PVOID)p,cb) == TRUE) \ 
     DbgBreak("Invalid read pointer");} 

Je pense que dans votre projet, il est défini comme 0 pour l'une ou l'autre des raisons suivantes:

  • pour rendre le code qui l'utilise compiler même lorsque l'en-tête wxdebug.h n'est pas disponible (c'est-à-dire, n'utilisant pas le SDK Windows Mobile)
  • IsBadReadPtr() est désormais considéré comme une API dangereuse qui ne doit pas être utilisée. Les docs pour IsBadreadPtr() indiquent: "Important Cette fonction est obsolète et ne doit pas être utilisée.Malgré son nom, elle ne garantit pas que le pointeur est valide ou que la mémoire pointée vers est sûre.Pour plus d'informations, voir Remarques. ". Et Raymond Chen a écrit un article sur les problèmes avec IsBadReadPtr(): IsBadXxxPtr should really be called CrashProgramRandomly
4

Il a probablement été utilisé pour autre chose, puis a été redéfini comme 0.

C'est la beauté des macros, vous pouvez les utiliser dans votre code, et ensuite, une redéfinition simple suffit pour changer toutes les occurrences de cette macro dans le code.

Ce qui se passe probablement maintenant, c'est que le programmeur veut que la validation (ValidateReadPtr) renvoie toujours FALSE (0 en C/C++).

+0

Mais cette macro ne fait aucune validation réelle contre Pointer du tout. – Alan

+0

Non, pas pour le moment. Mais probablement dans les versions précédentes sur le code, il l'a fait ... –

0
if (!ValidateReadPtr(p,cb)) 
    printf("Your ReadPtr is valid\n"); 

;)