>When using malloc() be careful to avoid the following idiom:
>
> if ((p = malloc(num * size)) == NULL)
> err(1, "malloc");
>
>Pourquoi ne pas utiliser ce test == NULL ?
Ah, ces jeunes. Une phrase d'attention, et apres hop on passe a autre
chose.
(l'explication d'Erwann complete. Evidemment, il *faut* lire la suite)
ja
J'ai quand même une autre question suite à la première. Après la le cture du man, tjrs par curiosité je regarde un peu les sources et je cons tate qu'a chaque malloc, il n'y a pas d'init des pointeurs à NULL ni de t est sur NULL.
Pourquoi ? :)
Le jeudi 18 juillet 2013 21:13:44 UTC+2, ja a écrit :
Ok merci :)
Le jeudi 18 juillet 2013 21:06:12 UTC+2, Marc Espie a écrit :
> In article ,
>
> ja wrote:
>
> >Je suis en train de lire par curiosité cette page de man OpenBSD sur
> >When using malloc() be careful to avoid the following idiom:
>
> >
>
> > if ((p = malloc(num * size)) == NULL)
>
> > err(1, "malloc");
>
> >
>
> >Pourquoi ne pas utiliser ce test == NULL ?
>
>
>
> Ah, ces jeunes. Une phrase d'attention, et apres hop on passe a autre
>
> chose.
>
>
>
> (l'explication d'Erwann complete. Evidemment, il *faut* lire la suite)
J'ai quand même une autre question suite à la première. Après la le cture du man, tjrs par curiosité je regarde un peu les sources et je cons tate qu'a chaque malloc, il n'y a pas d'init des pointeurs à NULL ni de t est sur NULL.
Pourquoi ? :)
Le jeudi 18 juillet 2013 21:13:44 UTC+2, ja a écrit :
Ok merci :)
Le jeudi 18 juillet 2013 21:06:12 UTC+2, Marc Espie a écrit :
> In article <a353e807-7d2f-4c23-a3dc-0d8efdfddd17@googlegroups.com>,
>
> ja <ja@px.io> wrote:
>
> >Je suis en train de lire par curiosité cette page de man OpenBSD sur
J'ai quand même une autre question suite à la première. Après la le cture du man, tjrs par curiosité je regarde un peu les sources et je cons tate qu'a chaque malloc, il n'y a pas d'init des pointeurs à NULL ni de t est sur NULL.
Pourquoi ? :)
Le jeudi 18 juillet 2013 21:13:44 UTC+2, ja a écrit :
Ok merci :)
Le jeudi 18 juillet 2013 21:06:12 UTC+2, Marc Espie a écrit :
> In article ,
>
> ja wrote:
>
> >Je suis en train de lire par curiosité cette page de man OpenBSD sur
> >When using malloc() be careful to avoid the following idiom:
>
> >
>
> > if ((p = malloc(num * size)) == NULL)
>
> > err(1, "malloc");
>
> >
>
> >Pourquoi ne pas utiliser ce test == NULL ?
>
>
>
> Ah, ces jeunes. Une phrase d'attention, et apres hop on passe a autre
>
> chose.
>
>
>
> (l'explication d'Erwann complete. Evidemment, il *faut* lire la suite)
espie
In article , ja wrote:
J'ai quand même une autre question suite à la première. Après la lecture du man, tjrs par curiosité je regarde un peu les sources et je constate qu'a chaque malloc, il n'y a pas d'init des pointeurs à NULL ni de test sur NULL.
Pourquoi ? :)
Non, mais t'es lourd. Non seulement tu lis les pages a moitie, mais maintenant tu poses des questions incompletes.
Les sources de quoi exactement ?
et pourquoi tu voudrais initialiser des pointeurs a NULL ?
In article <130c1784-7451-463c-81dc-d242e406c6b5@googlegroups.com>,
ja <ja@px.io> wrote:
J'ai quand même une autre question suite à la première. Après la lecture
du man, tjrs par curiosité je regarde un peu les sources et je constate
qu'a chaque malloc, il n'y a pas d'init des pointeurs à NULL ni de test
sur NULL.
Pourquoi ? :)
Non, mais t'es lourd. Non seulement tu lis les pages a moitie, mais
maintenant tu poses des questions incompletes.
Les sources de quoi exactement ?
et pourquoi tu voudrais initialiser des pointeurs a NULL ?
J'ai quand même une autre question suite à la première. Après la lecture du man, tjrs par curiosité je regarde un peu les sources et je constate qu'a chaque malloc, il n'y a pas d'init des pointeurs à NULL ni de test sur NULL.
Pourquoi ? :)
Non, mais t'es lourd. Non seulement tu lis les pages a moitie, mais maintenant tu poses des questions incompletes.
Les sources de quoi exactement ?
et pourquoi tu voudrais initialiser des pointeurs a NULL ?
ja
Un exemple : sys/kern/kern_sysctl.c ligne 1631. Encore une fois, c'est pour comprendre.
Pourquoi buf n'est pas init à NULL et pourquoi ya pas ce fameux test sur null lors du malloc.
cdt
Le jeudi 18 juillet 2013 23:49:38 UTC+2, Marc Espie a écrit :
In article ,
>J'ai quand même une autre question suite à la première. Après la lecture
>du man, tjrs par curiosité je regarde un peu les sources et je constat e
>qu'a chaque malloc, il n'y a pas d'init des pointeurs à NULL ni de tes t
>sur NULL.
>
>Pourquoi ? :)
Non, mais t'es lourd. Non seulement tu lis les pages a moitie, mais
maintenant tu poses des questions incompletes.
Les sources de quoi exactement ?
et pourquoi tu voudrais initialiser des pointeurs a NULL ?
Un exemple : sys/kern/kern_sysctl.c ligne 1631. Encore une fois, c'est pour comprendre.
Pourquoi buf n'est pas init à NULL et pourquoi ya pas ce fameux test sur null lors du malloc.
cdt
Le jeudi 18 juillet 2013 23:49:38 UTC+2, Marc Espie a écrit :
In article <130c1784-7451-463c-81dc-d242e406c6b5@googlegroups.com>,
>J'ai quand même une autre question suite à la première. Après la lecture
>du man, tjrs par curiosité je regarde un peu les sources et je constat e
>qu'a chaque malloc, il n'y a pas d'init des pointeurs à NULL ni de tes t
>sur NULL.
>
>Pourquoi ? :)
Non, mais t'es lourd. Non seulement tu lis les pages a moitie, mais
maintenant tu poses des questions incompletes.
Les sources de quoi exactement ?
et pourquoi tu voudrais initialiser des pointeurs a NULL ?
Un exemple : sys/kern/kern_sysctl.c ligne 1631. Encore une fois, c'est pour comprendre.
Pourquoi buf n'est pas init à NULL et pourquoi ya pas ce fameux test sur null lors du malloc.
cdt
Le jeudi 18 juillet 2013 23:49:38 UTC+2, Marc Espie a écrit :
In article ,
>J'ai quand même une autre question suite à la première. Après la lecture
>du man, tjrs par curiosité je regarde un peu les sources et je constat e
>qu'a chaque malloc, il n'y a pas d'init des pointeurs à NULL ni de tes t
>sur NULL.
>
>Pourquoi ? :)
Non, mais t'es lourd. Non seulement tu lis les pages a moitie, mais
maintenant tu poses des questions incompletes.
Les sources de quoi exactement ?
et pourquoi tu voudrais initialiser des pointeurs a NULL ?
espie
In article , ja wrote:
Un exemple : sys/kern/kern_sysctl.c ligne 1631. Encore une fois, c'est pour comprendre.
Pourquoi buf n'est pas init à NULL et pourquoi ya pas ce fameux test sur null lors du malloc.
Parce que ca n'est pas malloc(3) mais malloc(9)
T'es en train de confondre userland et noyau. C'est pas du tout du tout la meme fonction. Deja, le nombre de parametres n'est pas le meme.
Gros indice: M_WAITOK.
(ah et puis moi je n'ai pas de malloc a la ligne 1631 de sys/kern/kern_sysctl.c, tu as encore oublie un detail, qui est de preciser de quelle version tu parles... sans doute un noyau 5.2 ou 5.3).
Je repose ma question: pourquoi diable voudrais-tu mettre buf a 0 avant le malloc ? c'est des guidelines que tu as vu ailleurs ? elles sont sans interet ! Elles vont juste rajouter du bruit.
In article <70ad20c4-751a-4a99-90b1-316626375a79@googlegroups.com>,
ja <ja@px.io> wrote:
Un exemple : sys/kern/kern_sysctl.c ligne 1631. Encore une fois, c'est
pour comprendre.
Pourquoi buf n'est pas init à NULL et pourquoi ya pas ce fameux test sur
null lors du malloc.
Parce que ca n'est pas malloc(3) mais malloc(9)
T'es en train de confondre userland et noyau. C'est pas du tout du
tout la meme fonction. Deja, le nombre de parametres n'est pas le meme.
Gros indice: M_WAITOK.
(ah et puis moi je n'ai pas de malloc a la ligne 1631 de
sys/kern/kern_sysctl.c, tu as encore oublie un detail, qui est de
preciser de quelle version tu parles... sans doute un noyau 5.2 ou 5.3).
Je repose ma question: pourquoi diable voudrais-tu mettre buf a 0
avant le malloc ? c'est des guidelines que tu as vu ailleurs ? elles sont
sans interet ! Elles vont juste rajouter du bruit.
Un exemple : sys/kern/kern_sysctl.c ligne 1631. Encore une fois, c'est pour comprendre.
Pourquoi buf n'est pas init à NULL et pourquoi ya pas ce fameux test sur null lors du malloc.
Parce que ca n'est pas malloc(3) mais malloc(9)
T'es en train de confondre userland et noyau. C'est pas du tout du tout la meme fonction. Deja, le nombre de parametres n'est pas le meme.
Gros indice: M_WAITOK.
(ah et puis moi je n'ai pas de malloc a la ligne 1631 de sys/kern/kern_sysctl.c, tu as encore oublie un detail, qui est de preciser de quelle version tu parles... sans doute un noyau 5.2 ou 5.3).
Je repose ma question: pourquoi diable voudrais-tu mettre buf a 0 avant le malloc ? c'est des guidelines que tu as vu ailleurs ? elles sont sans interet ! Elles vont juste rajouter du bruit.
Manuel Giraud
ja writes:
Un exemple : sys/kern/kern_sysctl.c ligne 1631. Encore une fois, c'est pour comprendre.
En fait en lisant qques livres (peut être trop scolaire) j'ai souvent vu que les auteurs conseillaient de déclarer un pointeur puis de l'initialis er à NULL afin de ne pas oublier de lÂ’allouer plus tard dans le code.
Voici deux exemples :
Figure 2.4 http://books.google.fr/books?id=jfn1IAN3dvwC&pg=PT67&lpg=P P1&dq=secure+programming+c&hl=fr du livre "Secure Coding in C and C++"
p337 du livre "Programmation système en C sous Linux" : http://books.goog le.fr/books?idçtyMAntgaAC&pg=PA337&dq=malloc+null&hl=fr&sa=X&ei =tQLpUfr8NsnMOM_TgPAK&vedDcQuwUwAA#v=onepage&q=malloc%20null&f úlse
Après, peut être que c'est inutile ? peut être que le compilateur ini t à 0 par défaut ?
Désolé, kern_sysctl.c était effectivement pas un très bon exemple.
Le vendredi 19 juillet 2013 10:02:13 UTC+2, Marc Espie a écrit :
In article ,
ja wrote:
>Un exemple : sys/kern/kern_sysctl.c ligne 1631. Encore une fois, c'est
>pour comprendre.
>
>Pourquoi buf n'est pas init à NULL et pourquoi ya pas ce fameux test s ur
>null lors du malloc.
Parce que ca n'est pas malloc(3) mais malloc(9)
T'es en train de confondre userland et noyau. C'est pas du tout du
tout la meme fonction. Deja, le nombre de parametres n'est pas le meme.
Gros indice: M_WAITOK.
(ah et puis moi je n'ai pas de malloc a la ligne 1631 de
sys/kern/kern_sysctl.c, tu as encore oublie un detail, qui est de
preciser de quelle version tu parles... sans doute un noyau 5.2 ou 5.3).
Je repose ma question: pourquoi diable voudrais-tu mettre buf a 0
avant le malloc ? c'est des guidelines que tu as vu ailleurs ? elles sont
sans interet ! Elles vont juste rajouter du bruit.
En fait en lisant qques livres (peut être trop scolaire) j'ai souvent vu que les auteurs conseillaient de déclarer un pointeur puis de l'initialis er à NULL afin de ne pas oublier de lÂ’allouer plus tard dans le code.
Voici deux exemples :
Figure 2.4 http://books.google.fr/books?id=jfn1IAN3dvwC&pg=PT67&lpg=P P1&dq=secure+programming+c&hl=fr du livre "Secure Coding in C and C++"
p337 du livre "Programmation système en C sous Linux" : http://books.goog le.fr/books?id=e7tyMAntgaAC&pg=PA337&dq=malloc+null&hl=fr&sa=X&ei =tQLpUfr8NsnMOM_TgPAK&ved=0CDcQuwUwAA#v=onepage&q=malloc%20null&f =false
Après, peut être que c'est inutile ? peut être que le compilateur ini t à 0 par défaut ?
Désolé, kern_sysctl.c était effectivement pas un très bon exemple.
Le vendredi 19 juillet 2013 10:02:13 UTC+2, Marc Espie a écrit :
In article <70ad20c4-751a-4a99-90b1-316626375a79@googlegroups.com>,
ja wrote:
>Un exemple : sys/kern/kern_sysctl.c ligne 1631. Encore une fois, c'est
>pour comprendre.
>
>Pourquoi buf n'est pas init à NULL et pourquoi ya pas ce fameux test s ur
>null lors du malloc.
Parce que ca n'est pas malloc(3) mais malloc(9)
T'es en train de confondre userland et noyau. C'est pas du tout du
tout la meme fonction. Deja, le nombre de parametres n'est pas le meme.
Gros indice: M_WAITOK.
(ah et puis moi je n'ai pas de malloc a la ligne 1631 de
sys/kern/kern_sysctl.c, tu as encore oublie un detail, qui est de
preciser de quelle version tu parles... sans doute un noyau 5.2 ou 5.3).
Je repose ma question: pourquoi diable voudrais-tu mettre buf a 0
avant le malloc ? c'est des guidelines que tu as vu ailleurs ? elles sont
sans interet ! Elles vont juste rajouter du bruit.
En fait en lisant qques livres (peut être trop scolaire) j'ai souvent vu que les auteurs conseillaient de déclarer un pointeur puis de l'initialis er à NULL afin de ne pas oublier de lÂ’allouer plus tard dans le code.
Voici deux exemples :
Figure 2.4 http://books.google.fr/books?id=jfn1IAN3dvwC&pg=PT67&lpg=P P1&dq=secure+programming+c&hl=fr du livre "Secure Coding in C and C++"
p337 du livre "Programmation système en C sous Linux" : http://books.goog le.fr/books?idçtyMAntgaAC&pg=PA337&dq=malloc+null&hl=fr&sa=X&ei =tQLpUfr8NsnMOM_TgPAK&vedDcQuwUwAA#v=onepage&q=malloc%20null&f úlse
Après, peut être que c'est inutile ? peut être que le compilateur ini t à 0 par défaut ?
Désolé, kern_sysctl.c était effectivement pas un très bon exemple.
Le vendredi 19 juillet 2013 10:02:13 UTC+2, Marc Espie a écrit :
In article ,
ja wrote:
>Un exemple : sys/kern/kern_sysctl.c ligne 1631. Encore une fois, c'est
>pour comprendre.
>
>Pourquoi buf n'est pas init à NULL et pourquoi ya pas ce fameux test s ur
>null lors du malloc.
Parce que ca n'est pas malloc(3) mais malloc(9)
T'es en train de confondre userland et noyau. C'est pas du tout du
tout la meme fonction. Deja, le nombre de parametres n'est pas le meme.
Gros indice: M_WAITOK.
(ah et puis moi je n'ai pas de malloc a la ligne 1631 de
sys/kern/kern_sysctl.c, tu as encore oublie un detail, qui est de
preciser de quelle version tu parles... sans doute un noyau 5.2 ou 5.3).
Je repose ma question: pourquoi diable voudrais-tu mettre buf a 0
avant le malloc ? c'est des guidelines que tu as vu ailleurs ? elles sont
sans interet ! Elles vont juste rajouter du bruit.
Olivier Miakinen
Bonjour,
Le 19/07/2013 11:41, ja a écrit :
En fait en lisant qques livres (peut être trop scolaire) j'ai souvent vu que les auteurs conseillaient de déclarer un pointeur puis de l'initialiser à NULL afin de ne pas oublier de l’allouer plus tard dans le code.
Voici deux exemples :
Figure 2.4 http://books.google.fr/books?id=jfn1IAN3dvwC&pg=PT67&lpg=PP1&dq=secure+programming+c&hl=fr du livre "Secure Coding in C and C++"
Je vois la figure 2-3 où le pointeur est initialisé directement avec le retour de malloc() (et donc pas à NULL), mais je ne vois pas la figure 2-4.
p337 du livre "Programmation système en C sous Linux" : http://books.google.fr/books?idçtyMAntgaAC&pg=PA337&dq=malloc+null&hl=fr&sa=X&ei=tQLpUfr8NsnMOM_TgPAK&vedDcQuwUwAA#v=onepage&q=malloc%20null&fúlse
Ici, le pointeur est initialisé à NULL pour le cas où on ne ferait pas de malloc (si « ancienne » vaut NULL).
Après, peut être que c'est inutile ? peut être que le compilateur init à 0 par défaut ?
Non, il n'y a pas d'initialisation à 0 par défaut dans ce cas, et c'est donc utile de la faire dans le cas ci-dessus. En revanche, on avait l'impression que tu parlais d'un cas tel que ci-dessous, et là ce serait *vraiment* inutile :
{ char *buf = NULL;
buf = malloc(...): ... }
Le vendredi 19 juillet 2013 10:02:13 UTC+2, Marc Espie a écrit :
En fait en lisant qques livres (peut être trop scolaire) j'ai souvent
vu que les auteurs conseillaient de déclarer un pointeur puis de
l'initialiser à NULL afin de ne pas oublier de l’allouer plus tard
dans le code.
Voici deux exemples :
Figure 2.4 http://books.google.fr/books?id=jfn1IAN3dvwC&pg=PT67&lpg=PP1&dq=secure+programming+c&hl=fr du livre "Secure Coding in C and C++"
Je vois la figure 2-3 où le pointeur est initialisé directement avec
le retour de malloc() (et donc pas à NULL), mais je ne vois pas la
figure 2-4.
p337 du livre "Programmation système en C sous Linux" : http://books.google.fr/books?idçtyMAntgaAC&pg=PA337&dq=malloc+null&hl=fr&sa=X&ei=tQLpUfr8NsnMOM_TgPAK&vedDcQuwUwAA#v=onepage&q=malloc%20null&fúlse
Ici, le pointeur est initialisé à NULL pour le cas où on ne ferait pas
de malloc (si « ancienne » vaut NULL).
Après, peut être que c'est inutile ? peut être que le compilateur init à 0 par défaut ?
Non, il n'y a pas d'initialisation à 0 par défaut dans ce cas, et
c'est donc utile de la faire dans le cas ci-dessus. En revanche,
on avait l'impression que tu parlais d'un cas tel que ci-dessous,
et là ce serait *vraiment* inutile :
{
char *buf = NULL;
buf = malloc(...):
...
}
Le vendredi 19 juillet 2013 10:02:13 UTC+2, Marc Espie a écrit :
In article <70ad20c4-751a-4a99-90b1-316626375a79@googlegroups.com>,
En fait en lisant qques livres (peut être trop scolaire) j'ai souvent vu que les auteurs conseillaient de déclarer un pointeur puis de l'initialiser à NULL afin de ne pas oublier de l’allouer plus tard dans le code.
Voici deux exemples :
Figure 2.4 http://books.google.fr/books?id=jfn1IAN3dvwC&pg=PT67&lpg=PP1&dq=secure+programming+c&hl=fr du livre "Secure Coding in C and C++"
Je vois la figure 2-3 où le pointeur est initialisé directement avec le retour de malloc() (et donc pas à NULL), mais je ne vois pas la figure 2-4.
p337 du livre "Programmation système en C sous Linux" : http://books.google.fr/books?idçtyMAntgaAC&pg=PA337&dq=malloc+null&hl=fr&sa=X&ei=tQLpUfr8NsnMOM_TgPAK&vedDcQuwUwAA#v=onepage&q=malloc%20null&fúlse
Ici, le pointeur est initialisé à NULL pour le cas où on ne ferait pas de malloc (si « ancienne » vaut NULL).
Après, peut être que c'est inutile ? peut être que le compilateur init à 0 par défaut ?
Non, il n'y a pas d'initialisation à 0 par défaut dans ce cas, et c'est donc utile de la faire dans le cas ci-dessus. En revanche, on avait l'impression que tu parlais d'un cas tel que ci-dessous, et là ce serait *vraiment* inutile :
{ char *buf = NULL;
buf = malloc(...): ... }
Le vendredi 19 juillet 2013 10:02:13 UTC+2, Marc Espie a écrit :