返回后如何立即释放指针?

时间:2014-06-20 16:59:16

标签: 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()将它变成一个临时变量,这样我就可以释放节点然后返回临时变量但是,有更好的方法吗?

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

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

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

3 个答案:

答案 0 :(得分:3)

我认为你可能需要做一些事情:

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

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

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

答案 1 :(得分:0)

您可以安全地保护数据指针并释放stackNode函数。

stackNode
[
   Data pointer -----> [data]
]

savePointer ----> [data]

免费stackNode将删除所有exept数据

return savePointer

答案 2 :(得分:0)

你不能返回auto_ptr / unique_ptr(c ++ 11)吗?类似的东西:

unique_ptr<stackNode> postEval(char* equation) { unique_ptr<stackNode> stack; ..... return stack; }