2016-08-23 1 views
0

Essayer de construire une simple connexion MySQL, mais obtenir un bad_alloc et je ne peux pas comprendre comment résoudre ce problème, même regarder des postes similairesC++ connexion mysql bad_alloc en utilisant C++ connecteur

voici mon code

#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; 
} 

J'utilise mysql-connector-c++-1.1.7 mysqlcppconn.lib est utilisé en tant que dépendances mysqlcppconn.dll est situé dans le même répertoire que le .exe est.

Voici l'erreur Exception thrown at 0x000007FEFD39A06D in MysqlConn.exe: Microsoft C++ exception: std::bad_alloc at memory location 0x000000000014F5D0.

Merci

+0

* mysqlcppconn.lib est utilisé en tant que dépendances et il est situé dans le même répertoire que le fichier .exe est * - Un fichier .lib est utilisé dans le processus de construction et n'a rien à voir avec l'emplacement de 'exe'. Il semble que vous ne soyez pas au courant des composants utilisés pour créer votre application et des composants impliqués dans l'exécution de votre application. Peut-être que les DLL MySql que vous êtes censé utiliser lors de l'exécution ne sont pas compatibles avec votre exécutable? – PaulMcKenzie

+0

désolé, je voulais dire. Dll, je vais résoudre ce problème. J'ai suivi cette introduction et utilisé dymanic au lieu de construire statis https://dev.mysql.com/doc/connector-cpp/en/connector-cpp-apps-windows-visual-studio.html selon cette Je n'ai plus besoin de dlls mysql, je suppose? :( – abdoe

+0

Eh bien, vous devez vous assurer que les DLL (il semble qu'ils utilisent la bibliothèque standard C++), sont compatibles avec la version de la bibliothèque standard de votre compilateur, en d'autres termes, si ces DLL ont été créées avec VS 2013 Si vous utilisez une autre version de Visual Studio, alors il y aura des problèmes d'exécution.Si c'est une bibliothèque statique, la même chose s'applique.La bibliothèque statique doit être compilée avec le même compilateur, les mêmes options de compilateur, etc ... que votre application – PaulMcKenzie

Répondre

0

J'ai eu la même erreur sur linux.

L'erreur était: j'utilisais g++-4.8 pour construire le projet

Le problème se trouve sur la version des outils de construction (gcc, msvs, clang) utilisé pour construire le projet

0

J'ai aussi eu cette Erreur. Dans mon cas, je compile en utilisant VS2015 dans Windows.

Première fois que je choisis de compiler la version statique de la librairie MySQL. Puis plus tard, j'ai décidé de compiler la version dynamique. Cette fois, l'erreur bad_alloc à la mémoire s'est déclenchée.

La solution annule la configuration CPPCONN_PUBLIC_FUNC =.

Voir la fiche projet Pages de propriétés, en C++> préprocesseur> Définitions préprocesseur et supprimer l'élément « CPPCONN_PUBLIC_FUNC = »