暂无图片
人大金仓DCI
我来答
分享
暂无图片 匿名用户
人大金仓DCI

适配人大金仓数据库,使用DCI获取查询结果时出错

data_tmp = (char *) malloc(STR_LEN_1024);
if (!data_tmp)
{
printf("data malloc fail\n");
return NULL;
}
memset(data_tmp, 0, STR_LEN_1024);


status = OCIDefineByPos(ds->stmthp, &defhp, ds->errhp,
icolumn,
(dvoid *) data_tmp,
STR_LEN_1024,
SQLT_STR,
(dvoid *) 0,
(ub2 *) 0,
(ub2 *) 0,
(ub4) DCI_DEFAULT);
if (status != DCI_SUCCESS)
{
free_memory(data_tmp);
return NULL;
}

status = OCIStmtFetch2(ds->stmthp, ds->errhp, 1,
DCI_FETCH_ABSOLUTE,
recno + 1,
DCI_DEFAULT);

if (status == DCI_NO_DATA)
{
free_memory(data_tmp);
return NULL;
}

if (strlen(data_tmp) > 0)
{
data_sz = strlen(data_tmp) + 1;

if (ds->data)
ds->data = (char *) realloc(ds->data, data_sz);
else
ds->data = (char *) malloc(data_sz);
memset(ds->data, 0, data_sz);

strcpy(ds->data, data_tmp);

if (data_tmp)
free(data_tmp);
return ds->data;
}

if (data_tmp)
free(data_tmp);

return NULL; 查询多次后free(data_tmp); 出错 free(): invalid pointer
我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
伟鹏

不好意思,人大金仓的没搞过

暂无图片 评论
暂无图片 有用 0
virvle

不好意思,刚入门,还没搞过这块

暂无图片 评论
暂无图片 有用 0
周伟

暂时没玩儿过人大金仓的,看报错内容似乎就是说free(data_emp) 的时候,指针不对导致了空指针?

data_temp 看起来是个全局变量,是否是中间某次加工,或者某次查询结果然后赋值之后导致这个变量成了空指针(比如插件结果为NULL的时候,指针是个啥情况)?

如果这段代码曾经执行成功过,可以中间加一下debug信息,看看程序最远走到过什么地方,一直到出错的位置,然后分析看看出错时数据库中的数据本身是个什么情况。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏