1

我正在尝试使用语句 ID = r->getInt(1) 和 stat = r->getString(10) 从数据库中获取和存储 ID 和状态,其中我已将 ID 声明为 int 并将 stat 声明为字符串。其中第一个字段是包含值 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 回答