首页 > 解决方案 > 访问不在内存中的指针

问题描述

在线错误

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

标签: cpointersdereferencertosnull-pointer

解决方案


在尝试使用它之前检查它event_chk_ptr是否为非 NULL。当您到达链表的末尾时,这将停止循环:

   while (event_chk_ptr && event_chk_ptr != (LWEVENT_STRUCT_PTR)((pointer)&kernel_data->LWEVENTS)) {
    ...
   }

推荐阅读