我想做的是这个
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()
将它变成一个临时变量,这样我就可以释放节点然后返回临时变量但是,有更好的方法吗?
struct stackNode
{
char* data;
struct stackNode *next;
}
此外,函数postEval()基本上只是一个带有switch语句的循环,它解析变量'equation'的每个char并解决方程然后将答案作为char *返回。我们的老师只想看看我们是否可以使用堆栈来解决它...这就是重点。我知道不这样做会更容易,但是我没有完成任务。
答案 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;
}