gpt4 book ai didi

linux - 如何在 ucontext* ,linux 中释放堆栈?

转载 作者:太空狗 更新时间:2023-10-29 12:37:18 26 4
gpt4 key购买 nike

所以我正在尝试解除分配上下文。

这是我创建上下文的方式

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;

我认为它没有正确删除堆栈。有谁知道如何做到这一点?非常感谢

最佳答案

假设你试图在不再使用上下文后删除堆栈,并且假设你同时没有修改 uPtr 指向的上下文对象,那么

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

应该有效:您使用 new[] 分配了内存,因此您使用 delete[] 释放了它。为什么你认为它没有?

关于linux - 如何在 ucontext* ,linux 中释放堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7829074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com