【问题标题】:Program crashes without error message程序崩溃没有错误信息
【发布时间】: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,这毕竟是问题所在。

标签: c++ qt loops crash


【解决方案1】:

尝试在每次循环发生时打印出 absoluteprecision 的值:

while(绝对 >= 精度)

。 这应该可以帮助您弄清楚。

【讨论】:

  • 所以问题是上面提到的F.bernal,但我仍然不明白为什么每次我在if else中更改'a'或'b'的值时absolute都不会更新循环。
  • @Shironats 听起来您可能来自函数式语言。在像 C/C++ 这样的过程中,您的变量不会像您假设的那样得到更新。你必须重新计算它。
  • 我明白了,感谢基思帮我解决了这个问题。
【解决方案2】:

如果当您单击“调用”on_pushButton_clicked 的按钮时程序崩溃,则说明此插槽内有问题。

首先,之前创建的所有堆内存对象都是用新语句(特别是label)吗?

PS:你可以去掉break指令,由于前行的return,函数已经退出了while循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    相关资源
    最近更新 更多