结构作为函数的输出

时间:2013-07-20 08:44:21

标签: c struct function-declaration

我编写了这段代码但是在尝试编译时,它会返回错误:

:24:8: error: conflicting types for ‘safe_syscall’
:19:10: note: previous implicit declaration of ‘safe_syscall’ was here

我指定了行数。

typedef struct syscall ditem;

void safe_syscall_set (vmi_instance_t vmi)
{
    ditem *head,*tmp = NULL;
    char *name;
    int num;
    FILE * fp;
    fp = fopen ("syscall.list", "r");//file including syscall names and numbers in format "name number"
    //read file of syscalls and numbers
    while(fscanf(fp, "%s %d",name, &num)!= EOF);
    {
        tmp = head;
/* 19 */
        head = safe_syscall(name,num,tmp,vmi);  
    }
    return;
}

/* 24 */
ditem *safe_syscall (char *syscall,int num,ditem *head,vmi_instance_t vmi)
{
    uint64_t *sys_call_table = 0xffffffff816003e0;
    uint64_t *memory = (uint64_t *) malloc(sizeof(*sys_call_table));

    char *path = "/home/ossl5/sysmap";//hardcoded
    FILE *fp;
    fp=fopen(path,"r");
    if(!fp)
    {  
        printf("ERROR CAN NOT OPEN SYSTEM.MAP FILE\n");
        goto exit;
    }
    curr = (ditem *)malloc(sizeof(ditem));
    curr->num = num;
    curr->next  = head;//new nodes are being added to head of the list
    head = curr;
    curr->sys_name = syscall;
    //Calculating syscall handler size
    curr->size  = sys_routine_size(fp,syscall,num); 
exit:
     return head;
} 

我猜结构作为输出有问题。这个结构是一个链表,每次通过调用safe_syscall函数,新节点被添加到列表的头部,新的头部由此函数返回。

1 个答案:

答案 0 :(得分:4)

您尚未声明safe_syscall()因此假定返回int。尝试在第一次通话前发出声明ditem *safe_syscall (char *syscall,int num,ditem *head,vmi_instance_t vmi);