【问题标题】:how to deallocate stack in ucontext* , linux?如何在 ucontext* , linux 中释放堆栈?
【发布时间】:2011-12-11 08:38:05
【问题描述】:

所以我正在尝试释放上下文。

这是我创建上下文的方式

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;

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

【问题讨论】:

  • 我不太明白 foo 到底是什么。它是 ucontext 类型还是 char*?当你尝试 delete[](char*)uPtr->uc_stack.ss_sp 时发生了什么?

标签: linux multithreading stack memory-management


【解决方案1】:

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

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

应该可以:你用new[] 分配了内存,所以你用delete[] 释放它。为什么你认为没有?

【讨论】:

    猜你喜欢
    • 2018-06-01
    • 2016-08-05
    • 2012-02-20
    • 2016-07-25
    • 2013-11-22
    • 1970-01-01
    • 2017-12-02
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多