2011-10-19 21 views
2

所以我試圖釋放上下文。如何在ucontext *,linux中釋放堆棧?

這裏是我創建的上下文

ucontext* uPtr = new ucontext; 
getcontext(uPtr); 

char* stack = new char[STACK_SIZE]; 
uPtr->uc_stack.ss_sp = stack; 
uPtr->uc_stack.ss_size = STACK_SIZE; 
uPtr->uc_stack.ss_flags = 0; 
uPtr->uc_link = NULL; 

makecontext(uPtr, (void (*)()) func, 2, arg1, arg2); 

後,我創建類似上面的情況下,我使用它,並嘗試刪除時,我做了 但我無法弄清楚如何刪除uPtr-> uc_stack.ss_sp。

我試圖

delete[] foo; //suppose I saved the char* stack in foo 

,但它給了我賽格故障

,當我試圖

delete[] (char*)uPtr->uc_stack.sS_sp; 

我不認爲它正確地刪除堆棧。 有誰知道如何做到這一點? 非常感謝您

+0

我不太明白foo是什麼。它是一個ucontext類型或char *?以及當你嘗試刪除[](char *)時發生了什麼uPtr-> uc_stack.ss_sp? – jasonkim

回答

1

假設你正試圖刪除堆棧中的上下文中不再使用後,並假設你沒有修改上下文對象的平均時間指向uPtr然後

delete [] (char*)uPtr->uc_stack.ss_sp; 

應該可以工作:你用new[]分配了內存,所以你用delete[]釋放它。你爲什麼認爲它不?