#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[]
. Как вы думаете, почему это не так?