c - 访问不在内存中的指针
问题描述
在线错误
ptr = (PTR)(event->LINK.NEXT);
错误:无法访问内存上的指针。取消引用一个空的 pinter 事件->LINK.NEXT
将数据与 null 进行比较意味着 kernel->LINK.NEXT 可能为 null。我可以看到为什么它会给出这个错误。但是如何更改代码以便不显示取消引用错误。
KERNEL(data);
event_ptr->VALUE = 0;
event_ptr->FLAGS = flags;
_int_disable();
if (kernel_data->LINK.NEXT == NULL) {
_QUEUE_INIT(&kernel_data->LINK, 0);
} /* Endif */
while (ptr != (PTR)(kernel_data->NEXT)) {
enable();
Juble()
return(MQX_EINVAL);
}
ptr = (PTR)(event->LINK.NEXT);
} /* Endwhile */
#endif
解决方案
在尝试使用它之前检查它event_chk_ptr
是否为非 NULL。当您到达链表的末尾时,这将停止循环:
while (event_chk_ptr && event_chk_ptr != (LWEVENT_STRUCT_PTR)((pointer)&kernel_data->LWEVENTS)) {
...
}