连接失败时是否需要mysql_close?

时间:2009-09-10 12:05:00

标签: c++ mysql

我有一个代码片段连接到这样的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_initmysql_close获得的内容应该被mysql_real_connect释放,但有迹象表明{{1}}在失败时已经将其释放。

有人能为我解释一下吗?

1 个答案:

答案 0 :(得分:4)

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