2015-10-30 66 views
1

我一直在为操作系统类(所以请只有提示,没有完整答案)和一个函数的参数和返回类型是由我的教师提供,但谁的内容被我填补正在抛出一个错误。功能如下:C函数指针无效值问题

void start_thread(void (*function)(void)) 
{ 
    TCB_t* stackPointer = malloc(8192); //8192 is a provided value for assignment 
    TCB_t tcb; 
    tcb = init_TCB(&tcb, function, stack, sizeof(stack)); 
    AddQueue(RunQ, tcb); 
} 

以下函数来自错误被引发的行,该函数被定义为赋值并且不应该被改变。

void init_TCB (TCB_t *tcb, void *function, void *stackP, int stack_size) 
{ 
    memset(tcb, '\0', sizeof(TCB_t)); 
    getcontext(&tcb->context); 
    tcb->context.uc_stack.ss_sp = stackP; 
    tcb->context.uc_stack.ss_size = stack_size; 
    makecontext(&tcb->context, function, 0); 
} 

我不熟悉C和函数指针的特别的想法,但我所有的研究说,这个码应该不会引发错误,但它不断抛出以下:

error: void value not ignored as it ought to be

+0

你写了'init_TCB'吗? C不支持从函数指针到void指针的转换,在形式上它是未定义的行为。但实际上这是一个普遍的非标准扩展。如果你没有写出来,告诉你的老师,他们不应该教非标准的C. – Lundin

回答

2
tcb = init_TCB(&tcb, function, stack, sizeof(stack)); 

必须

init_TCB(&tcb, function, stackPointer, 8192); 

我会让你明白,为什么这些变化是有意义的。

如果他们没有意义,请添加评论。

+0

好吧真棒,谢谢。我已经看到为什么这项任务不起作用。我一定要看看sizeof()的变化。 –