如何在ucontext *,linux中解除分配堆栈?

时间:2011-10-19 22:37:59

标签: linux multithreading stack memory-management

所以我试图释放上下文。

以下是我创建上下文的方法

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;

我认为它没有正确删除堆栈。 有谁知道如何做到这一点? 非常感谢你

1 个答案:

答案 0 :(得分:1)

假设您在不再使用上下文后尝试删除堆栈,并假设您没有同时修改uPtr指向的上下文对象,那么

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

应该有效:您使用new[]分配了内存,因此您可以使用delete[]取消分配内存。为什么你认为它没有?