как освободить стек в ucontext *, Linux? - PullRequest
2 голосов
/ 20 октября 2011

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

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

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;

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

1 Ответ

1 голос
/ 12 апреля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...