我有一个代码片段连接到这样的MySQL数据库(不是直接来自代码,所以可能存在拼写错误):
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
释放,但有迹象表明{{1}}在失败时已经将其释放。
有人能为我解释一下吗?
答案 0 :(得分:4)
您对mysql_init(NULL)
的调用会分配内存。无论您是否能够真正连接到服务器,您仍然分配了内存,因此您需要使用mysql_close
释放它,这不仅会关闭连接而且会释放内存。我在文档中没有看到mysql_real_connect
释放内存本身的迹象。