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

Discussion in 'LANGS.C' started by kinji, Aug 1, 2008.

  1. kinji

    kinji New Member

    Blog Posts:
    0
    Joined:
    May 23, 2006
    Messages:
    61
    Имеется следующий код:
    Code (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

    Blog Posts:
    0
    Joined:
    Dec 29, 2007
    Messages:
    925
    Самая обычная рекурсия

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

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

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

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

    _DEN_ DEN

    Blog Posts:
    0
    Joined:
    Oct 8, 2003
    Messages:
    5,383
    Location:
    Йобастан
    > виснет на строке if (ptrStatus)

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

    kinji New Member

    Blog Posts:
    0
    Joined:
    May 23, 2006
    Messages:
    61
    нееет, взгляни внимательно на код...
    вызывает она не сама себя, это тока wrapper... вызывается та func, что ниже по коду... метод класса уже..

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


    _DEN_

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

    varnie New Member

    Blog Posts:
    0
    Joined:
    Jan 2, 2005
    Messages:
    1,785
    kinji
    раз ексепшн возникает, то и поймать его можно. поймай и посмотри что за ексепшн.