Comportement de malloc/realloc
Bonjour,
je suis en train de développer une bibliothèque de gestion sécurisée de la mémoire et j'aimerai comprendre quelques comportements des fonctions d'allocation dans des cas extrêmes :
Réserve 0 octet à une adresse valide.
Renvoi NULL. Il doit sagir d'un comportement indéfini puisque le paramètre de malloc est de type size_t (entier non signé) donc risque d'integer overflow.
On retrouve bien un comportement identique à malloc
Par contre avec p valide :
Renvoi NULL et p semble toujours valide. Alors pourquoi le comportement n'est pas le même qu'avec malloc : renvoyer p valide avec 0 octet de réversé?
Alors qu'est ce qui est normal et qu'est ce qu'il vaut mieux éviter?
Comme il s'agit sûrement de comportements indéfinis, voici ma configuration si vous souhaitez tester :
- Windows XP Pro
- Code::Blocks
- Mingw livré avec Code::Blocks
Merci d'avoir suivi jusqu'à là ;)
Re: Comportement de malloc/realloc
Citation:
Envoyé par gege2061
je suis en train de développer une bibliothèque de gestion sécurisée de la mémoire et j'aimerai comprendre quelques comportements des fonctions d'allocation dans des cas extrêmes :
Réserve 0 octet à une adresse valide.
Comportement dépendant de l'implémentation (non portable).
Citation:
Renvoi NULL. Il doit sagir d'un comportement indéfini puisque le paramètre de
malloc est de type
size_t (entier non signé) donc risque d'integer overflow.
cherche a à allouer (size_t) -1 bytes, soit la valeur maximale que peut contenir un size_t sur cette machine., car size_t est un entier non signé. L'allocation peut réussir ou non. Le comportement est défini.
Citation:
On retrouve bien un comportement identique à
malloc
Oui donc comportement dépendant de l'implémentation (non portable).
Citation:
Par contre avec
p valide :
Comportement dépendant de l'implémentation (non portable).
Les tests ne prouvent rien tant qu'il subsiste des comportements indéfini. Je rappelle que j'ai publié récemment un lien vers n1124 où se trouvent toutes tes réponses...
Citation:
Envoyé par n1124
7.20.3 Memory management functions
1 The order and contiguity of storage allocated by successive calls to the calloc,
malloc, and realloc functions is unspecified. The pointer returned if the allocation
succeeds is suitably aligned so that it may be assigned to a pointer to any type of object
and then used to access such an object or an array of such objects in the space allocated
(until the space is explicitly deallocated). The lifetime of an allocated object extends
from the allocation until the deallocation. Each such allocation shall yield a pointer to an
object disjoint from any other object. The pointer returned points to the start (lowest byte
address) of the allocated space. If the space cannot be allocated, a null pointer is
returned. If the size of the space requested is zero, the behavior is implementation defined:
either a null pointer is returned, or the behavior is as if the size were some
nonzero value, except that the returned pointer shall not be used to access an object.
Re: Comportement de malloc/realloc
Citation:
Envoyé par Emmanuel Delahaye
Citation:
Envoyé par n1124
7.20.3 Memory management functions
Arf j'en était pas arrivé là :(
:merci: pour vos réponses plus clair maintenant ;)