如何在linux的ucontext*中释放堆栈?
因此,我试图取消分配上下文 下面是我如何创建上下文的如何在linux的ucontext*中释放堆栈?,linux,multithreading,stack,memory-management,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; makeco
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
但它给了我seg故障
当我试着
delete[] (char*)uPtr->uc_stack.sS_sp;
我认为它没有正确地删除堆栈。
有人知道怎么做吗?
非常感谢假设您正在尝试在上下文不再使用后删除堆栈,并且假设您没有同时修改由
uPtr
指向的上下文对象
delete [] (char*)uPtr->uc_stack.ss_sp;
应该可以工作:您使用
new[]
分配内存,因此使用delete[]
解除分配内存。为什么你不这么认为?我不太明白foo到底是什么。它是ucontext类型还是char*?当你尝试删除[](char*)uPtr->uc\u stack.ss\u sp时会发生什么?