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