c++ - 如何在返回后立即释放指针?

标签 c++ c stack

嘿,这是我的第一篇文章,这是我的理论数据结构课的家庭作业。我要问的问题并不是作业的一部分,但如果可能的话会使代码更清晰。 (如果担心的话,作业是使用链表堆栈制作反向波兰表示法计算器。)

我想做的是这个

char* postEval(char* equation)
{
     char* curChar = equation;
     struct stackNode* stack = NULL;

      /*Alot of processing (hint: stack gets initialized during this)*/

      /****Is there a way to free the node after returning it?? --
           this is pseudo-code!*****/
      return FreeThenReturn(stack->data);  
 }

我知道我可以 sprintf()strcpy() 把它变成一个临时变量,这样我就可以释放节点然后返回临时变量但是,有没有更好的方式??

编辑:我不确定有什么不清楚,但是是的,我正在尝试将“数据”成员(它是一个 char*)的拷贝返回给调用函数。这是有问题的,因为我需要释放堆栈的内存并只发送存储在那里的数据的拷贝。我知道这样做似乎很奇怪,但这是老师特别告诉我们这样做的方式。我们根本无法编辑 struct stackNode 定义或 postEval() 的原型(prototype)。 struct stackNode定义如下:

    struct stackNode
    {
          char* data;
          struct stackNode *next;
    }

此外,函数 postEval() 基本上只是一个带有 switch 语句的循环,它解析变量“方程”的每个字符并求解方程,然后将答案作为字符 * 返回。我们的老师只是想看看我们是否可以使用堆栈来解决它……这就是重点。我知道不这样做会更容易,但我没有做作业。

最佳答案

我认为您可能需要按照以下方式做一些事情:

Data *data = stack->data; // or whatever type stack->data is
free(stack);
return data;

但我同意问题没有说清楚的评论。

要么你想要释放的东西和你想要返回的东西是同一件事(在这种情况下你的计划是有缺陷的——返回已经释放的东西是没有用的,因为你的调用者不能使用它),或者它们是不同的(在这种情况下,您需要以某种方式将它们分开,但我们无法确切地告诉您具体方法,因为您没有告诉我们足够的关于它们的信息)。

关于c++ - 如何在返回后立即释放指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24332231/

相关文章:

c++ - 将派生对象分配给函数内的基类指针

c++ - 复杂对称三对角矩阵的快速矩阵指数

c++ - 第二次缩放 mandelbrot 设置不会让它在所需位置放大

c - Sleep() 内联汇编调用可以工作,但会生成运行时检查失败

java - 为非泛型堆栈类编写方法如何工作?

c++ - 如何在堆栈上创建多态对象?

C++:编译未使用的类

c++ - 打印没有nested_ptr的nested_exception

c++ - 全局静态变量实例化行为

c - 如何计算二叉树的平均高度?