c - Why is it safer to use sizeof(*pointer) in malloc -


given

struct node {      int a;      struct node * next; }; 

to malloc new structure,

struct node *p = malloc(sizeof(*p)); 

is safer than

struct node *p = malloc(sizeof(struct node)); 

why? thought same.

it safer becuse don't have mention type name twice , don't have build proper spelling "dereferenced" version of type. example, don't have "count stars" in

int *****p = malloc(100 * sizeof *p); 

compare type-based sizeof in

int *****p = malloc(100 * sizeof(int ****)); 

where have make sure used right number of * under sizeof.

in order switch type have change 1 place (the declaration of p) instead of two. , people have habit of casting result of malloc have change 3 places.

more generally, makes lot of sense stick following guideline: type names belong in declarations , else. actual statements should type-independent. should avoid mentioning type names or using other type-specific features as possible.

the latter means: avoid unnecessary casts. avoid unnecessary type-specific constant syntax (like 0.0 or 0l plain 0 suffice). avoid mentioning type names under sizeof. , on.


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -