為什么程序自動退出? (100分)

H

huky

Unregistered / Unconfirmed
GUEST, unregistred user!
我們公司的考勤程序是用delphi5 寫的,運行一段時間(比如15天)會突然退出沒有任何出錯
提示. 有時候,會有類似以下的提示:
kao.exe
意外狀況:(0x00000025)
位址:0x77f....
 
访问了无效的内存区域!或者內存溢出
 
看样子,系统里应该是设了时限控制的。
 
如果在2K下执行非法操作是没有任何提示就自动退出的。
 
你的程序是每天都重起吗?还是一直开着?
如果是一直开着应不要再运行其它程序
 
应该是内存溢出
 
怎么會發生內存溢出呢? 并不是常常會發生這樣的情況..
是程序本身的問題么? 什么樣的操作會引發這樣的問題呢?
我們的考勤机是運行在winnt workstation上的.24小時運行,除了
考勤程序,還有一個自動拷貝的軟件,secondcopy...
 
還有,15天只是個比方,發生錯誤的時間不是規律性的.
 
你的程序的名字倒是取得挺有意思的,呵呵
是在没有人操作的时候出错吗?那你是不是用了例如Timer之类的东西?看看这里面的代码,
有没有操作对象的方式不对?比如释放了又去访问,或是没有创建就去访问。
 
是的,有用到timer,是在沒有人操作的時候
我去仔細瞧瞧先...
只是程序是24小時開著,而且,沒有什么規律性(鄙人沒有發現)
 
我想是开的时间太久了,或你的内存没有释放干净.不过,这种错误可有点难找出来哟.
 
应该是程序的内存释放有问题,运行时间长了就报错退出了。
 
程序主要是和服務器打交道.所以有不少的try...except結构. 比如
try
database1.close;
database1.open;
except
net_error:=true;
end;
應該怎么改進, 或者那些地方要防止內存的釋放出問題...
最好大家舉點例子..
 
有沒有釋放不需要的內存的方法?
 
没有什么释放不需要内存的方法,关键是要及时释放已经不需要的对象,或者用finally来
保证就算出现异常也会被释放掉。
但我觉得你这里不是没有释放的问题,而是非法访问的问题。
你的Timer做了些什么事?你看看有没有Create对象、文件访问之类的东西。
还有你的那段程序:
try
database1.close;
database1.open;
except
net_error:=true;
end;
如果在Open时异常的话,由于已经被你捕捉了,所以它还能接着运行end以后的代码,如果
你这时不加判断地读取database1中的表时也会报错。
 
我嘗試著在打開一個query后,就寫一行close query..
因為連著執行的几個query都要查詢一個特定的表...
我在每一個query執行完后就寫一個close語句后,不再出現异常退出的現象了..
可能原先那樣會產生訪問的沖突.我不是很了解,只是暫時解決了問題.
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
733
import
I
I
回复
0
查看
578
import
I
I
回复
0
查看
873
import
I
顶部 底部