我对 Linux 内核讨论最多的宏“container_of”的扩展中的语句 ((type*)0)->member 有点困惑
为什么在 container_of 宏中取消引用 0 不会产生问题?我认为(可能是我错了)因为我们将 0 类型转换为(type*),所以我们没有问题。但是等一下,考虑一下:-
void irq_handler(void *ptr)
{
struct my_struct *p = (struct my_struct *) ptr;
ptr->my_member = 7;
global_variable = ptr->my_another_member;
...
...
}
假设由于某些内存损坏,我的 ptr 变为 NULL,那么在这种情况下内核肯定会由于取消引用 NULL 指针而崩溃?
为什么会有这种偏袒或分化?还是我的任何理解都是错误的?请纠正我。