1

ID を int として宣言し、stat を文字列として宣言したステートメント ID = r->getInt(1) および stat = r->getString(10) を使用して、データベースから ID とステータスをフェッチして保存しようとしています。最初のフィールドは値 1 を含む ID で、10 番目のフィールドは値 'A' を含むステータスです。ID のみをフェッチしようとすると、コードは正常に動作します。それ以外の場合、ステータスも取得しようとすると、コードの実行中に以下のエラーが発生します。

*** glibc detected *** ./test: free(): invalid pointer: 0x000000001c3f5a60 ***
======= Backtrace: =========
/lib64/libc.so.6[0x3d23e71684]
/lib64/libc.so.6(cfree+0x8c)[0x3d23e74ccc]
/usr/lib64/libstdc++.so.6(_ZNSsD1Ev+0x3a)[0x3d28a9dc1a]
./test[0x401837]
./test(__gxx_personality_v0+0x310)[0x401120]
/lib64/libc.so.6(__libc_start_main+0xf4)[0x3d23e1d8b4]
./test(__gxx_personality_v0+0x89)[0x400e99]

助けてください。

私が達成しようとしていることの基本だけを追加します。

char loader_session[10];
char sql_query[500];
int ID;
string STATUS;
string CURRENT_CNT_FILE

env = Environment::createEnvironment (Environment::DEFAULT);
conn = env->createConnection( user, passwd, db);
strcpy(loader_session,"TEST");
sprintf(sql_query,"SELECT ID, SESSION_NAME, SRC_SUCCESS_PATH, SRC_CDR_PATH, LOG_FILE, CURRENT_CNT_FILE, LOG_MAX_FILE_CNT, LOG_MAX_FILE_SIZE, PROCEDURE_NAME, STATUS, ERROR_CDR_PATH, LOCK_FILE_PATH FROM TEST_DB WHERE SESSION_NAME = '%s'",loader_session);
Statement* const s = conn->createStatement(sql_query);
s->setPrefetchRowCount(10);
ResultSet* const r = s->executeQuery();
while (r->next())
  {

    ID      =  r->getInt(1);
    STATUS  =  r->getString(10);
    CURRENT_CNT_FILE = r->getString(6);
  }
4

1 に答える 1

0

わかりました、質問に対する一時的な解決策を得ました。MALLOC_CHECK_ を 0 に設定するだけで、エラーは発生せず、コードは正常に実行されます。これの副作用はわかりませんが、今のところ問題なく動作しています。

于 2013-03-03T17:44:28.540 に答える