我一直在做一个操作系统类的作业(所以,请注意,只有提示,没有完整的答案),还有一个函数的参数和返回类型是由我的老师提供的,但内容是由我填写的,这个函数抛出了一个错误。功能如下:
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值
最佳答案
tcb = init_TCB(&tcb, function, stack, sizeof(stack));
必须是
init_TCB(&tcb, function, stackPointer, 8192);
我会让你明白为什么这些改变是有意义的。
如果没有意义,请添加评论。
关于c - C函数指针无效值问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33428927/