как освободить стек в ucontext *, Linux?

#linux #multithreading #stack #memory-management

#linux #многопоточность #стек #управление памятью

Вопрос:

итак, я пытаюсь освободить контекст.

Вот как я создал контекст

 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;
  

Я не думаю, что это правильно удаляет стек.
Кто-нибудь знает, как это сделать?
Большое вам спасибо

Комментарии:

1. я не совсем понимаю, что такое foo . Это тип ucontext или char *? и что происходит, когда вы пытаетесь удалить [](char*) uPtr-> uc_stack.ss_sp?

Ответ №1:

Предполагая, что вы пытаетесь удалить стек после того, как контекст больше не используется, и предполагая, что вы не изменили объект контекста, на который указывает uPtr в то же время

 delete [] (char*)uPtr->uc_stack.ss_sp;
  

должно сработать: вы выделили память с new[] помощью, поэтому вы освобождаете ее delete[] . Как вы думаете, почему это не так?