我一直在为一个操作系统类的工作分配(所以请,只提示,没有完整的答案),以及一个函数,其参数和返回类型由我的教师提供,但是我的内容是由我填充的一个错误。功能如下:
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,尤其是函数指针的想法,但我的所有研究都表示这段代码不应该抛出错误,但它不断抛出以下内容:
错误:无法忽略void值,因为它应该是
答案 0 :(得分:2)
tcb = init_TCB(&tcb, function, stack, sizeof(stack));
需要
init_TCB(&tcb, function, stackPointer, 8192);
我会让你弄清楚为什么这些改变是有道理的。
如果它们没有意义,请添加评论。