Здравствуйте, 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;
}