【发布时间】:2016-10-20 14:53:08
【问题描述】:
我正在使用 Qt Creator(社区)来学习如何编码。
我有一个计算函数根的任务,我尝试使用在 Qt Widgets 项目中找到的代码 here。
当我尝试运行程序时,Qt 没有检测到任何错误。
但是,每当我尝试使用 on_pushButton_clicked() 显示结果时,我的程序就会崩溃。
我的讲师怀疑某处应该有一个开环,但我没有看到。
任何帮助将不胜感激。
代码如下:
double function1(double q)
{
double ab = ((q*q*q)+(9*q*q)-(15*q)+98)*(sin(q));
return ab;
}
void MainWindow::on_pushButton_clicked()
{
ui->label->setText(tr("%1").arg(func1()));
}
double MainWindow::func1()
{
std::setprecision(4);
double precision = 0.001;
double a = -10;
double b = -9;
double product = function1(a)*function1(b);
double absolute = fabs(a-b);
double e = 0;
if (product>0)
{
++a;
++b;
}
else
{
while (absolute >= precision)
{
e = (a + b) / 2;
double fa = function1(a);
double fe = function1(e);
if (fe == 0)
{
return e;
break;
}
if (fa*fe>0)
{
a = e;
}
else if (fa*fe<0)
{
b = e;
}
}
}
return e;
}
【问题讨论】:
-
您是否尝试过使用调试器?它究竟在哪里崩溃?如果您怀疑它在
on_pushButton_clicked中崩溃(如果您使用的是调试器,您会知道而不是怀疑),那么,那里使用的所有指针都是非空的吗? -
相当常见。如果您预计崩溃足以输入错误消息,那么您很可能已经修复了该错误。
-
从不更新绝对和精度...那你为什么要比较它?
-
感谢 F.bernal,这毕竟是问题所在。