【问题标题】:c++ application crashes when doing recursive functionc++ 应用程序在执行递归函数时崩溃
【发布时间】:2018-05-09 03:43:37
【问题描述】:

我有一个名为btnTimeIn 的按钮调用identifyStaff() 函数:

public: System::Void btnTimeIn_Click(System::Object^  sender, System::EventArgs^  e) {
        this->identifyStaff();
}

我的identifyStaff() 函数正在检查员工/用户是否被识别。如果未识别,则会出现一个带有确定按钮的消息框,如果单击了ok 按钮,则将再次调用identifyStaff() 函数。

private: System::Void identifyStaff() {
uint32  flag = 0; // 1:accept or 0:reject
... some code beign skip
flag = 1;

... some code being skip



// accept or if finger print was indentified
     if (flag == 1){
         // Open confirmation form
     }
     else 
     {
        if (MessageBox::Show("Staff unidentified. Please rescan again.",
            "Timestamp", MessageBoxButtons::YesNo,
            MessageBoxIcon::Question) == System::Windows::Forms::DialogResult::Yes) {
            this->identifyStaff();
        }
        else {
            // do nothing. Close the MessageBox
        }
     }
}

现在这是我运行应用程序时所做的:

  1. 点击“时间”按钮
  2. 我将未注册的手指放入生物识别中
  3. 消息框出现重试按钮以重试。
  4. 我点击消息框中的重试/确定按钮
  5. 再次将手指放入生物特征(这次是已注册的手指)
  6. 识别成功,确认表单打开。
  7. 我关闭确认表单,然后应用程序崩溃。

我还是 C++ 的初学者,还没有深入研究递归函数。

那么,为什么我会收到此错误/为什么我的应用会崩溃?

提前感谢您分享您的知识。

更新 我在帖子中更新了我的代码以显示标志变量。

【问题讨论】:

  • @Someprogrammerdude 在 OP 对事件的描述中似乎并非如此。
  • 这就是我想要做的,如果可能的话,无限递归。
  • 至少,您需要提供崩溃堆栈。
  • 您尝试做的可能不是正在发生的事情?如果您在调试器中逐行执行代码,进入递归调用,它是否按预期工作? identified 会被设置吗?
  • 如果 OP 的描述是正确的('显示确认表'),递归很可能是红鲱鱼。这就是为什么崩溃堆栈是典型的原因。

标签: c++ function recursion visual-c++ clr


【解决方案1】:

看起来您的递归函数的条件从未设置为 true,并且您最终会遇到堆栈溢出异常。您从未修改过identifyStaff 中的identified 变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-25
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    • 2017-12-02
    • 1970-01-01
    相关资源
    最近更新 更多