高分求解(急)

liwanlin 2002-04-23 12:02:53
我用VC写了一个处理文件的动态链接库,
当文件很多时(上千个),做到中间就会异常退出。
单独处理几十个文件都没问题。

我检查了所有Open文件的地方都加了Close,
而且程序也没报内存泄露(监控机器内存也比较正常)。
不知是何原因。

所有文件处理都是用CFile类来进行的。
请高手帮忙想想,可能是什么原因造成的?
...全文
30 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ychener 2002-04-26
  • 打赏
  • 举报
回复
对文件的操作是必须要有异常处理的。

因为文件本身在操作系统中属于共享资源,一个文件很有可能被别的线程独享占用着,你的程序可能就是因为这个原因呀!
uaiia 2002-04-26
  • 打赏
  • 举报
回复
写错了,修改:
//写数据库函数
void WriteRecord(void)
{
//加入写数据库代码
}
//在你的程序中数据库代码替换成下面的
BOOL err = TRUE;
  while(err){
err = FALSE;
__try{
WriteRecord();

__except(TRUE){
err = TRUE;
}
}
uaiia 2002-04-26
  • 打赏
  • 举报
回复
不想在研究了,给你一个最简单的方法解决问题:

//写数据库函数
void WriteRecord(void)
{
//加入写数据库代码
}
//在你的程序中数据库代码替换成下面的
BOOL err = TRUE;
  while(err){
err = FALSE;
__try{
//加入写数据库代码

__except(TRUE){
err = TRUE;
}
}
liwanlin 2002-04-23
  • 打赏
  • 举报
回复
我大致确定了问题所在,
我的程序是从文件读数据,处理完后写到Oracle数据库,
刚才我发现,把写数据库的处理屏蔽后就不报错了,

写oracle数据库是用OCI实现的直接路径装载,
请问有高手能指点吗?
为什么多次调用就出错?
uaiia 2002-04-23
  • 打赏
  • 举报
回复
建议你捕获CFile抛出的异常,单独处理文件没有问题,并不表示以后没有异常发生,有很多情况CFile会抛出异常的,你要分别处理!
liwanlin 2002-04-23
  • 打赏
  • 举报
回复
到报错时,都还有5个G,
空间肯定够,因为我生成的数据很少,几十M
wlz47 2002-04-23
  • 打赏
  • 举报
回复
看看你的硬盘空间是不是足够大
liwanlin 2002-04-23
  • 打赏
  • 举报
回复
而且,出错时间是随机的,
这次是第575个文件出错,
下次可能是第579个文件出错。
liwanlin 2002-04-23
  • 打赏
  • 举报
回复
文件处理没有异常,
因为我单独处理部分文件都没有问题。
且出错时是直接死掉。(我从PB调的)

Elminster 2002-04-23
  • 打赏
  • 举报
回复
你有没有捕获 CFile 类的成员函数抛出的异常?
blue_flash 2002-04-23
  • 打赏
  • 举报
回复
两种可能:
1、oci的接口有bug,会出现内存泄露的问题。
2、使用oci接口的方法存在问题导致内存泄露。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧