所以我试图取消分配上下文。

这是我创建上下文的方式

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[]取消了分配。您为什么不这样认为?

08-27 17:39