免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2024 | 回复: 3
打印 上一主题 下一主题

Pro*C++中使用游标导致内存泄露 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-01 17:05 |只看该作者 |倒序浏览
在proc程序中,由于一次需要返回多个结果,采用了游标,但是程序运行时,发现内存一直在涨,后来测试到游标这部分导致的,请问为什么呢,我已经释放了游标了,下面是部分代码:
EXEC SQL BEGIN DECLARE SECTION;
                int         nlocal_vps;
                int         nlocal_result;
                                       
                SQL_CURSOR        local_ondemand_cursor;
               
                struct
                {
                        int                 index;
                        VARCHAR         time[15];
                        VARCHAR         callernum[20];
                        VARCHAR         callednum[20];
                        VARCHAR         diyring[40];
                        VARCHAR         ringfile[40];     
                                       
                } on_demand;
               
               
        EXEC SQL END DECLARE SECTION;
       
        nlocal_vps=vps;
                       
        nlocal_result=-888;
       
        EXEC SQL CONTEXT USE :m_context;
        EXEC SQL ALLOCATE :local_ondemand_cursor;
        //// 执行存储过程
        EXEC SQL AT :m_pdb_link_name EXECUTE
                BEGIN
                        IVR_SEND.QUERY_SEND_RING(:nlocal_vps,:local_ondemand_cursor,:nlocal_result);
                END;
        END-EXEC;

for(;
        {
       
                EXEC SQL WHENEVER NOT FOUND Do break;
               
                on_demand.time.len=15;
                memset(on_demand.time.arr,0,15);
               
                on_demand.callernum.len=20;
                memset(on_demand.callernum.arr,0,20);
               
                on_demand.callednum.len=20;
                memset(on_demand.callednum.arr,0,20);
               
                on_demand.diyring.len=40;
                memset(on_demand.diyring.arr,0,40);
               
                on_demand.ringfile.len=40;
                memset(on_demand.ringfile.arr,0,40);       

                EXEC SQL FETCH :local_ondemand_cursor INTO on_demand;

                PutOnDemandToVps(vps,nlocal_result,on_demand.index,(char *)on_demand.time.arr,(char *)on_demand.callernum.arr,(char *)on_demand.callednum.arr,(char *)on_demand.diyring.arr,(char *)on_demand.ringfile.arr);
                               
        }

EXEC SQL WHENEVER SQLERROR DO sqlerror(sqlca);
        EXEC SQL CLOSE :local_ondemand_cursor;

[ 本帖最后由 chendf 于 2006-6-1 17:07 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-06-05 17:46 |只看该作者
没有人知道么?555

论坛徽章:
0
3 [报告]
发表于 2006-06-05 23:05 |只看该作者

——不会吧,好象挺多人用proc的

——你的C程序里有没有可能泄漏的语句,好生查查。

论坛徽章:
0
4 [报告]
发表于 2006-06-06 09:56 |只看该作者
用游标变量一定要free(exec sql free cursor_name)
allocate 内存能不释放吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP