OVH Cloud OVH Cloud

Bete extrait FAC ??

8 réponses
Avatar
A. P.
var = malloc(sizeof * var * 42) ;

Cette expression me laisse perplexe et/ou ambigue.
On déclare var et on fixe sa taille et on alloue la mémoire adhoc.
J'ai loupé quelque chose-là et à plusieurs endroits dans les exemples de
la fac.
Pourquoi "sizeof".
A ce moment là, il n'en sait rien.

--
A.P.
question idiote, probablement, tant pis.

8 réponses

Avatar
Laurent Deniau
A. P. wrote:
var = malloc(sizeof * var * 42) ;


=
var = malloc(sizeof(*var)*42);

pas de pb.

a+, ld.

--
[ Laurent Deniau -- Scientific Computing & Data Analysis ]
[ CERN -- European Center for Nuclear Research ]
[ - http://cern.ch/Laurent.Deniau ]
[ -- One becomes old when dreams become regrets -- ]

Avatar
Yves ROMAN

var = malloc(sizeof * var * 42) ;

Cette expression me laisse perplexe et/ou ambigue.
On déclare var et on fixe sa taille et on alloue la mémoire adhoc.
J'ai loupé quelque chose-là et à plusieurs endroits dans les exemples de
la fac.
Pourquoi "sizeof".
A ce moment là, il n'en sait rien.



On alloue la place pour 42 elements pointes par var

Personnellement je rajoute des parenthèses pour clarifier, ce qui donne

toto_t *var ;
var = malloc(sizeof(* var) * 42) ;

ce qui revient à :
var = malloc(sizeof(toto_t) * 42) ;
soit la place pour 42 objets de type toto_t
mais avec l'avantage que l'instruction marche aussi si var est déclaré en
titi_t *titi ;

Avatar
A. P.
"Yves ROMAN" a écrit dans le message news:


var = malloc(sizeof * var * 42) ;

Cette expression me laisse perplexe et/ou ambigue.


toto_t *var ;


A ce stade-ci, on ne connait pas encore la taille de "toto_t"

var = malloc(sizeof(* var) * 42) ;

sizeof ???


ce qui revient à :
var = malloc(sizeof(toto_t) * 42) ;
soit la place pour 42 objets de type toto_t


idem.

--
A.P.
J'suis bouché ou quoi ?
Bon w-e.


Avatar
Laurent Deniau
Sinese wrote:
On Fri, 5 Sep 2003 16:08:06 +0200 , A. P. wrote:

A ce stade-ci, on ne connait pas encore la taille de "toto_t"



Bah si tu connais la taille de toto_t.


Pas necessairement.

Tu l'as deja defini sinon ton toto_t *titi; ne passera jamais


Ca passe, meme si sizeof(toto_t) n'est pas connu (principe de l'ADT). C'est le
sizeof(*var) qui ne passera pas.

a+, ld.

--
[ Laurent Deniau -- Scientific Computing & Data Analysis ]
[ CERN -- European Center for Nuclear Research ]
[ - http://cern.ch/Laurent.Deniau ]
[ -- One becomes old when dreams become regrets -- ]


Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', "A. P." wrote:

Tu veux dire FAQ?

var = malloc(sizeof * var * 42) ;

Cette expression me laisse perplexe et/ou ambigue.


Elle n'est pas ambigüe, tout au plus mal écrite :

var = malloc (sizeof *var * 42);

C'est plus clair?

On déclare var et on fixe sa taille et on alloue la mémoire adhoc.


- On ne déclare (ni ne définit) quoi que ce soit (pas de type).
- On initialise une variable (probablement un pointeur typé) avec l'adresse
d'un tableau alloué dynamiquement de 42 éléments du même type.

J'ai loupé quelque chose-là et à plusieurs endroits dans les exemples de
la fac.


FAQ!

Pourquoi "sizeof".
A ce moment là, il n'en sait rien.


Qui n'en sait rien?

sizeof *var retourne la taille d'un élément.
sizeof *var * 42 retourne la taille de 42 éléments.

C'est pas clair?

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/

Avatar
Emmanuel Delahaye
In 'fr.comp.lang.c', "A. P." wrote:

var = malloc(sizeof(* var) * 42) ;

sizeof ???



Et si tu ouvrais ton livre de C?

'sizeof' est un opérateur unaire C qui retourne la taille d'un objet en
nombre de bytes.

--
-ed- [remove YOURBRA before answering me]
The C-language FAQ: http://www.eskimo.com/~scs/C-faq/top.html
<blank line>
FAQ de f.c.l.c : http://www.isty-info.uvsq.fr/~rumeau/fclc/


Avatar
Erwan David
"A. P." écrivait :

var = malloc(sizeof * var * 42) ;

Cette expression me laisse perplexe et/ou ambigue.
On déclare var et on fixe sa taille et on alloue la mémoire adhoc.
J'ai loupé quelque chose-là et à plusieurs endroits dans les exemples de
la fac.
Pourquoi "sizeof".
A ce moment là, il n'en sait rien.


C'est sizeof(*var) * 42
On alloue 42 fois la taille de la structure pointée par var, donc un
tableau de 42 structures de ce type.

Avatar
A. P.
"A. P." a écrit dans le message news:

var = malloc(sizeof * var * 42) ;

Merci pour les réponses.


--
A.P.