2009-09-10 72 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