goto语句引起的程序陷阱

看下面代码,执行后会有什么隐患问题?

int transfer_message_to_appserver(user_session_t *user_session,const char *uid,const char *message)
{
    int ret = -1;
    xmlDocPtr doc = xmlParseMemory(message,strlen(message));
    xmlNodePtr node = xmlDocGetRootElement(doc);
	
    if (NULL == user_session)
    {
        user_session = get_map_user_apps(c2s->memcached_server,uid);
        fetch = true;
    }

    if (NULL == user_session)
    {
        DPRINT(2,NULL,"get session failed. [%s]\n",uid);
        //assert(user_session);
        goto RETURN;
    }
	
    char *xml_buf = dump_xmldoc_to_buf(doc);
	
    /* other code */
	
RETURN:
    if (xml_buf) g_free(xml_buf);
		
    return ret;
}

    如果程序从goto语句跳转到RETURN标签处,在释放xml_buf的时候,将导致程序崩溃。因为xml_buf指针从未初始化过

    个人建议,在要使用goto情况下,可以考虑使用下面的语句

do
{
    if (false == expression)
        break;
    /* other code */
}while(false);

你可能感兴趣的:(c/c++,goto,do/while)