在object_list_print()函数执行期间出现c-Seg故障?

在object_list_print()函数执行期间出现c-Seg故障?,c,linked-list,segmentation-fault,C,Linked List,Segmentation Fault,修正:我在更改指针地址之前添加了一个快速if语句 我的程序在线路上出现seg故障: obj = (object_t *) model->objs->current->entity; 在我的object_list_print()函数中,如下所示 // does not call object_print() directly, but instead // will call the polymorphic function obj->printer() void o

修正:我在更改指针地址之前添加了一个快速if语句


我的程序在线路上出现seg故障:

obj = (object_t *) model->objs->current->entity;
在我的object_list_print()函数中,如下所示

// does not call object_print() directly, but instead
// will call the polymorphic function obj->printer() 
void object_list_print(model_t  *model, FILE  *out)
{
   object_t *obj;

   /* For each object in model->objs 
           list, assert that it is an object, 
                then invoke polymorphic printer    */
   list_reset(model->objs);
   obj = (object_t *)model->objs->current->entity;

   while(list_not_end(model->objs))
   {
      assert(obj->cookie == OBJ_COOKIE);
      obj->printer(obj, out);
      list_next_link(model->objs);
           // ADDED LINE //
      if(list_not_end(model->objs))         /* This line fixes the code */
         obj = (object_t *)model->objs->current->entity;  /* SEG FAULTS */
   }

   return;
}
作为参考,model->objs是一个列表结构

typedef struct list_type
{
   link_t  *first;           /* First link in the list */
   link_t  *last;            /* Last link in the list  */
   link_t  *current;
}  list_t;
每个链接都是这样的:

typedef struct link_type
{
   struct link_type *next;    /* Next link in the list   */
   void             *entity;  /* Entity owned by link    */
}  link_t;

知道我做错了什么吗?我的语法错了吗?

没有必要像在C中那样强制转换
void*
。其中一个是错误的指针:
model->objs->current
。使用调试器。@EdS。如果其中一个是错误的指针,它应该在前一行给出警告。我已经检查了结构,每个指针都是正确的。模型包含一个列表(指向列表的指针)。上面是列表和链接结构。“如果其中一个是错误的指针,它应该在前面的一行给出警告”-你为什么相信?请链接到规范的相关部分,该部分说明编译器必须在可能出现“错误”指针的情况下忽略诊断(提示;它不存在)。如果您遇到segfault,其中一个肯定是不“正确”的。当代码显然不正确时,不要假设它是正确的。