2016-03-27 6 views
0

私のプロジェクトは、既存のプロセスに注入されるDLLです。 私のコードは次のようになります。クエリを実行中にMySQL Connector C++がクラッシュする

void Authenticator::initialize(string server, string username, string password, string database, string tablePrefix, int securityLevel){ 
    sqlServer = server; 
    sqlUsername = username; 
    sqlPassword = password; 
    sqlDatabase = database; 
    try { 
     sql::Driver *driver; 
     sql::Connection *con; 
     sql::Statement *stmt; 
     sql::ResultSet *res; 
     sql::PreparedStatement *pstmt; 

     driver = get_driver_instance(); 
     con = driver->connect(server, username, password); 
     con->setSchema(database); 
    } 
} 

bool Authenticator::authenticate(string username, string password, int &errorCode){ 
    try{ 
     sql::Driver *driver; 
     sql::Connection *con; 
     sql::Statement *stmt; 
     sql::ResultSet *res; 
     sql::PreparedStatement *pstmt; 
     driver = get_driver_instance(); 

     stmt = con->createStatement(); 
     res = stmt->executeQuery("SELECT username, password FROM mybb_users WHERE username = '" + username + "' AS _mybbpassword"); 
     return true; //password is correct 
    } 
    catch(sql::SQLException &e){ 
     errorCode = 0; //unable to connect to mysql server 
     return false; 
    } 
} 

私は初期化::認証を実行している、proccessは数秒フリーズしますが、それはOKです。ただし、Authenticator :: authenticateを実行すると、DLLがクラッシュして例外エラーが発生します。

(私はそれをデバッグすることができない、唯一の方法は、それが注入されますどのようにcorretプログラムである)そして、はい、私が持っているDLLは、あなたが初期化されていないを使用している

+0

とにかくコンパイルできないような孤立したコード断片ではなく、質問を編集し、[mcve]を含めてください。 –

+0

@SamVarshavchik表示することはあまりありませんが、MySQL Connector C++のDLLプロジェクトのみがドキュメント化されています。 –

答えて

0

マルチスレッドライブラリ(/ MD)にsettedまた

con = driver->connect(server, username, password); 

は、あなたには、いくつかの他の問題を持っている:あなたは、この行の前にこのような何かが欠けている

stmt = con->createStatement(); 

:認証::認証でcon

  • ライブラリでget_driver_instance()を1回だけ呼び出す必要があります。
  • driver-> connect()、con-> createStatement()、stmt-> executeQuery()によって割り当てられたメモリを解放していません。あなたのプログラムは時間の経過と共に成長します。
関連する問題