所以我试图释放上下文。
以下是我创建上下文的方法
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 :(得分:1)
假设您在不再使用上下文后尝试删除堆栈,并假设您没有同时修改uPtr
指向的上下文对象,那么
delete [] (char*)uPtr->uc_stack.ss_sp;
应该有效:您使用new[]
分配了内存,因此您可以使用delete[]
取消分配内存。为什么你认为它没有?