【发布时间】:2015-02-25 19:08:18
【问题描述】:
我正在尝试调试用于验证用户输入并在输入正常时返回值的递归函数。函数如下所示:
double load_price()
{
double price;
Goods * tempGd = new Goods();
cin >> price;
while (!cin)
{
cin.clear();
#undef max
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
cout << endl;
cout << "You didn't enter a number. Do so, please: ";
cin >> price;
} // endwhile
if (!tempGd->set_price(price))
{
cout << endl;
cout << "The price " << red << "must not" << white << " be negative." << endl;
cout << "Please, insert a new price: ";
load_price();
}
else
{
delete tempGd;
return price;
}
}
Goods类的方法set_price()如下所示
bool Goods::set_price(double price)
{
if (price> 0)
{
priceSingle_ = price;
priceTotal_ = price* amount_;
return true;
}
return false;
}
我尝试在纸上画出问题,但我的所有图表看起来都像我的函数已经看起来的样子。我觉得退货有些问题,但不知道出在哪里。
我们将不胜感激。
【问题讨论】:
-
你认为
load_price();的递归结果会去哪里? -
不要,我重复不要,在这里使用指针和
new。这是完全没有意义的,它实际上会在你的代码中引入内存泄漏。 -
@WhozCraig 我真的不知道。它似乎被埋在函数本身的某个地方。
-
@KonradRudolph 感谢您的提示,m8,将堆上的货物对象替换为堆栈对象。
-
@WhozCraig:正确答案是:nowhere。