所以我试图取消分配上下文。
这是我创建上下文的方式
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;
我认为它不能正确删除堆栈。
有谁知道如何做到这一点?
非常感谢你
最佳答案
假设您要在不再使用上下文之后尝试删除堆栈,并假设您同时没有修改uPtr
指向的上下文对象,则
delete [] (char*)uPtr->uc_stack.ss_sp;
应该可以工作:您使用
new[]
分配了内存,所以您使用delete[]
取消了分配。您为什么不这样认为?