在object_list_print()函数执行期间出现c-Seg故障?
修正:我在更改指针地址之前添加了一个快速if语句在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
我的程序在线路上出现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,其中一个肯定是不“正确”的。当代码显然不正确时,不要假设它是正确的。