2009-09-10 69 views
3

我有一个代码片段,其连接到MySQL数据库这样的(而不是直接从代码,所以可能有错别字):连接失败时是否需要mysql_close?

m_connectionHandler = mysql_init(NULL); 
if (m_connectionHandler == NULL) 
{ 
    // MySQL initialization failed 
    return; 
} 

MYSQL *tmp = mysql_real_connect(m_connectionHandler, 
           m_hostname, 
           m_username, 
           m_password, 
           m_dbName, 
           m_port, 
           NULL, 
           m_flags); 
if (tmp == NULL) 
{ 
    // Connect failed 
    mysql_close(m_connectionHandler); 
    return; 
} 

我的问题是,如果mysql_close(第二if语句tmp == NULL),在当mysql_real_connect返回NULL,是必需的,或者如果mysql_real_connect失败时为我释放连接处理程序?

该文档确实声明您从mysql_init获得的内容应该被mysql_close释放,但有迹象表明它在失败时已被释放mysql_real_connect

任何人都可以为我阐述一些这方面的信息吗?

回答

3

您拨打mysql_init(NULL)的电话分配内存。无论您是否能够真正连接到服务器,您仍然分配了内存,因此您需要使用mysql_close来释放内存,这不仅会关闭连接,还会释放内存。我在文档中没有看到mysql_real_connect会释放内存本身。

+1

我终于通过源代码进行了检查,看起来他们在'mysql_real_connect'的底部执行了一些free'ing内存操作,但它并不完全清楚它执行了所有'mysql_close'操作,所以我会接受这个答案。 – 2009-09-13 12:05:45