永続的なMySQL接続バージョン5.1.46を維持するCプログラムがあります。プログラムは、私のような二重の無料または破損エラーを取得する実行している間、私は、MySQLを再起動した場合:MySQLの再起動により、MySQL C APIを使用したフリーまたは破損が発生する
# /etc/init.d/mysql restart
Shutting down MySQL........ [ OK ]
Starting MySQL.*** glibc detected *** /home/user/a.out: double free or corruption (!prev): 0x000000000b64dd00 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3739471634]
私はMYSQL_OPT_RECONNECTオプションを設定しており、明示的にまだこの接続を閉じていないため、自動的に再接続するための接続を期待しています。さらに、私が実行しているクエリは、誤ってNULLに設定したか、または割り当てを解除したchar *ではなく、定数の二重引用符で囲まれた文字列です。ここで
は、GDBでの結果のコアファイルから数行
#11 0x000000000044ed71 in mysql_send_query (mysql=0x41966aa0, query=0x41966100 "SELECT count (*) from TableA", length=27) at client.c:2894
#12 0x000000000044edd9 in mysql_real_query (mysql=0x602a, query=0x602d <Address 0x602d out of bounds>, length=6) at client.c:2905
#13 0x000000000042b42f in do_query (conn=0x41966aa0, msg=0x41966100 "SELECT count(*) from TableA") at dosql.cpp:20
これが発生する理由を任意のアイデアですか?
サーバ側で実行しているMySQLのバージョンと、クライアントでどのバージョンのC APIを使用していますか? – ObscureRobot
私が取り組んでいるシステムはMySQLサーバ5.1.46を持っていて、私はC APIを含む5.1.46 MySQL-develパッケージを使用しています。 –