On Sat, Mar 10, 2012 at 12:10 AM, Manohar Vanga <manohar.vanga@xxxxxxxxx> wrote: > Also, from the > archives: http://www.mail-archive.com/kernelnewbies@xxxxxxxxxxxx/msg12320.html Thank you for links which gives good explanation. But I am not able to understand the part accessing a member through NULL pointer like ((size_t) &((TYPE *)0)->MEMBER) How it is handled? In C code if we access a member through NULL pointer like this will cause the code to crash. Am I missing something? > > On Fri, Mar 9, 2012 at 7:21 PM, Vijay Chauhan <kernel.vijay@xxxxxxxxx> > wrote: >> >> Hi, >> >> I'm checking the container_of and offsetof macro >> >> #define container_of(ptr, type, member) ({ \ >> const typeof( ((type *)0)->member ) *__mptr = (ptr); >> (type *)( (char *)__mptr - offsetof(type,member) );}) >> >> #define offsetof(TYPE, MEMBER) \ >> ((size_t) &((TYPE *)0)->MEMBER) >> >> >> I did not understand the first line of both macro. Will it not create >> the NULL pointer dereference problem? I know it works and read some >> article but it did not explain this part, so can anyone explain why >> the NULL pointer error is not coming. Am I missing something? >> Any C language specification of such example. >> >> _______________________________________________ >> Kernelnewbies mailing list >> Kernelnewbies@xxxxxxxxxxxxxxxxx >> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies > > > > > -- > /manohar _______________________________________________ Kernelnewbies mailing list Kernelnewbies@xxxxxxxxxxxxxxxxx http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies