FIXED:我在更改指针地址
之前添加了一个快速if语句我的程序是行错误的
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是list_t结构
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;
,每个link_t如下所示:
typedef struct link_type
{
struct link_type *next; /* Next link in the list */
void *entity; /* Entity owned by link */
} link_t;
知道我在这里做错了吗?我的语法错了吗?