2016-08-23 2 views
0

Попытки построить простое соединение MySQL, но получает bad_alloc и я не могу понять, как решить эту проблему, даже не смотря на аналогичные должностис ++ MySQL bad_alloc соединения с использованием C++ разъема

вот мой код

#include <iostream> 
#include <stdlib.h> 
#include <sstream> 
#include <memory> 
#include <string> 
#include <stdexcept> 

#include "mysql_connection.h" 
#include "cppconn\driver.h" 
#include "cppconn\statement.h" 
#include "cppconn\connection.h" 
#include "cppconn\exception.h" 
#include "cppconn\prepared_statement.h" 
#include "cppconn\statement.h" 


using namespace std; 
using namespace sql; 

int main() 
{ 

    Driver *driver; 
    Connection *conn; 
    Statement *stmt; 

    driver = get_driver_instance(); 
    conn = driver->connect("127.0.0.1:3306", "root", "root"); // breaks here 
    stmt = conn->createStatement(); 
    stmt->execute("USE mydb"); 

    return 0; 
} 

Я использую mysql-connector-c++-1.1.7 mysqlcppconn.lib используется в качестве зависимостей mysqlcppconn.dll находятся в той же директории, как .exe есть.

Здесь ошибка Exception thrown at 0x000007FEFD39A06D in MysqlConn.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x000000000014F5D0.

Благодаря

+0

* mysqlcppconn.lib используется в качестве зависимостей, и он находится в той же директории, как .exe является * - Файл .lib используется в процессе сборки и не имеет никакого отношения к тому, где находится 'exe'. Кажется, вы не знаете, какие компоненты используются для создания вашего приложения и какие компоненты участвуют в запуске вашего приложения. Может быть, DLL MySql, которые вы должны использовать во время выполнения, несовместимы с вашим исполняемым файлом? – PaulMcKenzie

+0

Извините, я имел в виду .dll, я исправлю это. Я после этого введение и использовали dymanic вместо STATIS сборки https://dev.mysql.com/doc/connector-cpp/en/connector-cpp-apps-windows-visual-studio.html в соответствии с этим Думаю, мне больше не нужны dll mysql? :( – abdoe

+0

Ну, вы должны убедиться, что DLL (кажется, они используют стандартную библиотеку C++), совместимы с версией стандартной библиотеки вашего компилятора. Другими словами, если эти библиотеки DLL были созданы с использованием VS 2013, и вы используя другую версию Visual Studio, тогда будут проблемы с исполнением. Если это статическая библиотека, то применяется то же самое. Статическая библиотека должна быть построена с тем же компилятором, параметрами компилятора и т. д. в качестве вашего приложения. – PaulMcKenzie

ответ

0

Я имел такую ​​же ошибку на Linux.

ошибка: я использовал g++-4.8 для создания проекта

Проблема заключается в версии сборки инструментов (ССАГПЗ, МСВС, лязг), используемый для создания проекта

0

Я также имел это ошибка. В моем случае я компилирую VS2015 в Windows.

В первый раз я выбираю статическую статическую версию MySQL lib. Затем я решил скомпилировать динамическую версию. На этот раз ошибка bad_alloc в памяти исчезла.

Решение откатывает конфигурацию CPPCONN_PUBLIC_FUNC =.

Перейти к проекту Страницы свойств под ++> Препроцессора> Препроцессора Определения C и удалить пункт «CPPCONN_PUBLIC_FUNC =»

Смежные вопросы