2011-07-25 12 views
2

MySQL/C++コネクタパッケージを使用して、ローカルにホストされている自分のMySQLデータベースに接続しようとしています。実際に私に問題を与えている行は、次のとおりです。2行のうち2行目を押すと、メモリ割り当てエラーが発生します。ここでは、デバッガからの読み込みがあります。MySQL C++コネクタのメモリオーバーフローエラー

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に変換しようとしました。同じエラー。私は、接続関数のためのさまざまなパラメータを試してみましたが、それは同様に問題ではないようです。なぜ私はプログラムの早い段階でメモリリークの問題が発生しているのか誰にも説明できますか?

+0

デバッグモードで初期化されていないメモリは、MSVCによって[通常はCCCCCCCCで埋められています](http://stackoverflow.com/q/370195/576139)です。どこかで初期化されていない値が使用されているようです。 –

+0

実際のスタックトレースを取得できますか? –

+0

ドライバを使用するには、ドライバを初期化する必要がありますか? – ethrbunny

答えて

1

auto_ptrを使用する場合は注意が必要です。 auto_ptrには珍しいコピーセマンティクスがあるので(コピー操作ではポインタをコピーするのではなく、指し示されたオブジェクトに所有権が移されます)、オブジェクトを終了する前に誤って削除するのは簡単です。 auto_ptr <>オブジェクトが代入の右側に決して現れないことと、auto_ptrを値でとる関数に引数として渡さないことを確認してください。徹底的に診断するために十分なコードを表示していません。私は解放コネクタのDLLとリンク、デバッグモードを使用する場合

は例

// 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. 
3

のために私は、同じ問題を持っています。デバッグモードでは、デバッグDLLを使用して、OKかもしれません。

関連する問題