MySQL C ++ Ошибка переполнения памяти - PullRequest
2 голосов
/ 25 июля 2011

Я пытался подключиться к своей локальной базе данных MySQL с помощью пакета MySQL / C ++ Connector. Линии, которые действительно вызывают у меня проблему:

driver = get_driver_instance();
auto_ptr < Connection > con (driver -> connect("tcp://127.0.0.1:3306", "root", "root"));

Нажатие на 2-ю из двух строк приводит к ошибке выделения памяти. Вот показания отладчика.

HEAP[mySQLTestApp.exe]: Invalid allocation size - CCCCCCD0 (exceeded 7ffdefff)
First-chance exception at 0x7c812afb in mySQLTestApp.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0012fa88..
HEAP[mySQLTestApp.exe]: Invalid allocation size - CCCCCCCD (exceeded 7ffdefff)
First-chance exception at 0x7c812afb in mySQLTestApp.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0012f428..
First-chance exception at 0x7c812afb in mySQLTestApp.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000..
Unhandled exception at 0x7c812afb in mySQLTestApp.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x0012f428..

Я действительно не уверен, что делаю неправильно. Я подумал, что это может быть сам указатель соединения, поэтому я попытался преобразовать его в auto_ptr, который вы видите сейчас Та же ошибка. Я пробовал разные параметры для функции подключения, но это тоже не проблема. Кто-нибудь может объяснить, почему у меня проблемы с утечкой памяти в начале программы?

Ответы [ 2 ]

3 голосов
/ 08 сентября 2011

У меня та же проблема, когда я использую режим отладки, связывая с выпуском разъема DLL. Используйте debug dll в режиме отладки, может быть в порядке.

1 голос
/ 26 июля 2011

Вы должны быть осторожны при использовании auto_ptr.Поскольку auto_ptr имеет необычную семантику копирования (операция копирования передает владение указанному объекту, а не копирует указатель), довольно легко случайно удалить объект, прежде чем закончить с ним.Убедитесь, что ваши объекты auto_ptr <> никогда не появляются в правой части присваивания и что вы не передаете их в качестве аргументов функции, которая принимает значение auto_ptr по значению.Вы не показываете достаточно своего кода для полной диагностики.

Например

// declaration for some function you've defined later
void some_user_function(auto_ptr<Connection> con);

auto_ptr<Connection> con(driver->connect("tcp://127.0.0.1:3306", "root", "root"));
some_user_function(con);
// At this point con will be a NULL pointer, and the Connection object it used to point
// to will have been deleted.
...