Требуется ли mysql_close при сбое подключения? - PullRequest
3 голосов
/ 10 сентября 2009

У меня есть фрагмент кода, который подключается к базе данных 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 Ответ

4 голосов
/ 10 сентября 2009

Ваш звонок на mysql_init(NULL) выделяет память. Независимо от того, можете ли вы действительно подключиться к серверу, вы все равно выделяете память, поэтому вам нужно освободить ее с помощью mysql_close, которая не только закрывает соединения, но и освобождает память. Я не вижу никаких признаков в документации, что mysql_real_connect освободит саму память.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...