С ++ приложение вылетает при выполнении рекурсивной функции - PullRequest
0 голосов
/ 09 мая 2018

У меня есть кнопка с именем 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 ++ и еще не изучал более подробно о рекурсивномфункция.

Итак, почему я получаю эту ошибку / почему происходит сбой моего приложения?

Заранее благодарим вас за то, что поделились своими знаниями.

ОБНОВЛЕНИЕ Я обновляю свой код в посте, чтобы показать про флаг variable.

1 Ответ

0 голосов
/ 09 мая 2018

Похоже, что условие для вашей рекурсивной функции никогда не устанавливается в значение true, и в результате вы получаете исключение переполнения стека. Вы никогда не изменяли переменную identified внутри identifyStaff.

...