2015-10-30 64 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()的變化。 –