Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在linux的ucontext*中释放堆栈?_Linux_Multithreading_Stack_Memory Management - Fatal编程技术网

如何在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时会发生什么?