Re: Выход из функции при ошибке
От: WFrag США  
Дата: 27.12.02 03:07
Оценка:
Здравствуйте, menify, Вы писали:
А можно так ( без goto ):
MSG*    new_msg(..)
{
    MSG*        msg = NULL;
    HEADER*     header = NULL;
    ADDR*       to = NULL;
    ADDR*       from = NULL;
    char*       body = NULL;
    
    do
    {
        header = (HEADER*) malloc( sizeof(HEADER) );
        if (header == NULL)
            break;
    
        ...
    
        to = (ADDR*)malloc( sizeof(ADDR) );
        if (to == NULL)
            break;
    
        ...
    
        from = (ADDR*)malloc( sizeof(ADDR) );
        if (from == NULL)
            break;
    
        ...
    
        msg = (ADDR*)malloc( sizeof(MSG) );
        if (msg == NULL)
            break;
 
        ...
    
        return msg;
    } while( 0 );
    
    
    //-------------------------------------------------------//
    //          LABELS:                                      //
    if( body )
        free( body );                   // !!!
    if( from )
        free( from );                   // !!!
    if( to )
        free( to );                     // !!!
    if( header )
        free( header );                 // !!!
      return NULL;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.