Виснет при проверке указателя

Тема в разделе "LANGS.C", создана пользователем kinji, 1 авг 2008.

  1. kinji

    kinji New Member

    Публикаций:
    0
    Регистрация:
    23 май 2006
    Сообщения:
    61
    Имеется следующий код:
    Код (Text):
    1. // wrapper for class function
    2. void Func()
    3. {
    4.     if (ptrStatus)
    5.         ptrStatus->Func();
    6. }
    7.  
    8. ...
    9. ...
    10. ...
    11. void StatusTable::Func()
    12. {
    13. ...
    14. }
    виснет на строке if (ptrStatus)
    причём указатель ptrStatus не нулевой, в нём лежит адрес, адрес его самого. Я так понимаю это this указатель.

    Была мысль, что объект на который указывает ptrStatus уничтожен, но указатель остался. Но нигде он явно не уничтожается...

    В чём может быть дело ?

    Спасибо !
     
  2. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Самая обычная рекурсия

    void Func()
    {
    if (ptrStatus) ptrStatus->Func(); //вот тут ты повторно вызываешь Func()
    }

    попробуй вначале функции вставить
    MessageBoxA(0, "abc", "abc",0);

    если под вынь пишешь

    тогда самому все станет понятно ))
     
  3. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    > виснет на строке if (ptrStatus)

    Если ptrStatus - честный указатель, то на этой строке виснуть не может.
     
  4. kinji

    kinji New Member

    Публикаций:
    0
    Регистрация:
    23 май 2006
    Сообщения:
    61
    нееет, взгляни внимательно на код...
    вызывает она не сама себя, это тока wrapper... вызывается та func, что ниже по коду... метод класса уже..

    void StatusTable::Func() <-----
    {
    ...
    }


    _DEN_

    именно виснет... под gdb... он на ней останавливается и всё... а если не под отладчком, тада Exception возникает...
    я даже ставил DBGPRINT, перед и после, первый срабатывает, второй нет
     
  5. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    kinji
    раз ексепшн возникает, то и поймать его можно. поймай и посмотри что за ексепшн.