Vérifier si un pointeur est alloué de la mémoire ou pas

Peut-on vérifier si un pointeur est passé à une fonction est attribuée à la mémoire ou en C?

J'ai wriiten ma propre fonction en C qui accepte un pointeur de caractère - buf [pointeur vers une mémoire tampon] et de la taille - buf_siz [taille de la mémoire tampon]. En fait, avant l'appel de cette fonction, l'utilisateur doit créer une zone tampon et d'allouer de la mémoire d'buf_siz.

Puisqu'il y a une chance que l'utilisateur peut oublier de faire de l'allocation de mémoire et tout simplement passer le pointeur de ma fonction, je veux vérifier ce point. Donc est il possible que je peux vérifier dans ma fonction pour voir si le pointeur est passé est vraiment alloué avec buf_siz quantité de mémoire .. ??

EDIT1: Il semble qu'il n'y est pas de la bibliothèque standard pour le vérifier .. mais est-il sale hack pour le vérifier .. ??

EDIT2: je sais que ma fonction sera utilisée par un bon programmeur en C ... Mais je veux savoir si nous pouvons vérifier ou pas .. si on peut je voudrais l'entendre qu'elle ..

Conclusion: il est Donc impossible de vérifier si un pointeur est alloué à la mémoire ou pas au sein d'une fonction

  • Je ne crois pas vraiment, mais je ne me sens pas suffisamment à l'aise pour poster une réponse.
  • Il n'y a aucun moyen de vérifier, à moins d'utiliser un gestionnaire de mémoire ou rouler vos propres.
  • Si c'est un pointeur de caractère, nous pouvons faire strlen() ou sizeof() et de vérifier la quantité de mémoire allouée(bien sûr, si la chaîne est terminée par NUL). Pour les autres types, je ne suis pas sûr qu'il y en est d'une certaine façon.!!
  • Je sais que c'est une vieille question, mais il est possible de garder une trace de la mémoire allouée, sans l'aide de hacks. Mon code ci-dessous donne quelques extraits pour vous mettre en route.
  • La conclusion que l'on doit tirer de tout cela est que vous ne devriez pas vérifier, même si c'était possible. Cet article explique le problème. Bien qu'écrit dans Windows terme, le problème n'est pas spécifique à Windows.
InformationsquelleAutor codingfreak | 2009-10-16