question general sur malloc
bonjour a tous!!
Voila j'ai juste une petite question
Si l'on fait par exemple:
Code:
1 2 3
|
int v = 2;
int *i = malloc (v * sizeof (int)); |
Normalement tout se passe bien ( en verifiant que le malloc a bien fonctionne...)
Mais, si on relance avec v = 0;
on aura donc un malloc (0);
Quels seraient les consequence de cela?
Cela peut il entrainer un comportement indefini du programme?
Merci!
Re: question general sur malloc
Citation:
Envoyé par vince3320
Voila j'ai juste une petite question
Si l'on fait par exemple:
Code:
1 2 3
|
int v = 2;
int *i = malloc (v * sizeof (int)); |
Normalement tout se passe bien ( en verifiant que le malloc a bien fonctionne...)
Citation:
Mais, si on relance avec v = 0;
on aura donc un malloc (0);
Quels seraient les consequence de cela?
Cela peut il entrainer un comportement indefini du programme?
D'une façon grossière, oui, c'est un bug. Si on affine la réponse, c'est un comportement spécifié par l'implémentation. C'est donc non portable, mais défini. A éviter, donc.
Citation:
Envoyé par N869
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 freed or reallocated). 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. The value of a pointer that refers to freed space is indeterminate.