首页 > 解决方案 > c++ 应用程序在执行递归函数时崩溃

问题描述

我有一个名为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++ 的初学者,还没有深入研究递归函数。

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

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

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

标签: c++functionrecursionvisual-c++clr

解决方案


看起来你的递归函数的条件永远不会设置为 true,你最终会遇到堆栈溢出异常。你从来没有修改过identified里面的变量identifyStaff


推荐阅读