难道是内存不足?

coolblue 2001-06-30 11:36:42
//Delphi5.0 + Sql Server 7.0
//同样的代码如果单独运行则也正常,但如果放在大的程序中则出现如下问题

Var
Session:Array of TSession;
DataBase:Array of TDataBase;
Query:Array of TQuery;
begin
//如果只创建以下的任意两个对象,并进行相应处理,系统正常。
//如果三个对象都创建,则当退出主程序知,系统提示内存地址异常
SetLength(Session,TotalComNum);
SetLength(DataBase,TotalComNum);
SetLength(Query,TotalComNum);
//分别对Session,DataBase,Query进行初始化
for I := 1 to TotalComNum do
begin
//动态创建数据对象
Session[I - 1] := TSession.Create(Application);
Session[I - 1].Name := 'Session' + IntToStr(I);
Session[I - 1].SessionName := 'Ses1' + IntToStr(I);
Session[I - 1].Active := True;

DataBase[I - 1] := TDataBase.Create(Application);
DataBase[I - 1].Name := 'DataBase' + IntToStr(I);
DataBase[I - 1].AliasName := 'gsmphone';
DataBase[I - 1].DatabaseName := 'DB' + IntToStr(I);
DataBase[I - 1].LoginPrompt := False;
DataBase[I - 1].Params.Add('USER NAME=sa');
DataBase[I - 1].SessionName := Session[I - 1].SessionName;
DataBase[I - 1].Connected := True;

Query[I - 1] := TQuery.Create(Application);
Query[I - 1].Name := 'Query' + IntToStr(I);
Query[I - 1].SessionName := Session[I - 1].SessionName;
Query[I - 1].DatabaseName := DataBase[I - 1].DatabaseName;

end;
//其他操作
//.......
//释放对象
Session[I - 1].Destroy;
DataBase[I - 1].Destroy;
Query[I - 1].Destroy;
end;
...全文
55 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
bailee 2001-06-30
  • 打赏
  • 举报
回复
很有可能
m_leaner 2001-06-30
  • 打赏
  • 举报
回复
Session:Array of TSession;
DataBase:Array of TDataBase;
Query:Array of TQuery;
这些定义都是数组,你只释放了
Session[I - 1].Destroy;
DataBase[I - 1].Destroy;
Query[I - 1].Destroy;
其他的也德释放
例如
Session[I - 2].Destroy;
DataBase[I - 2].Destroy;
Query[I - 2].Destroy;
。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。
coolblue 2001-06-30
  • 打赏
  • 举报
回复
其实我真正的疑问是,如果代码单独运行正常,但在整个程序中运行出错!
这是不是内存不足,我用了128M做开发。我真的不知道这是这么问题。
coolblue 2001-06-30
  • 打赏
  • 举报
回复
//释放对象原程序是这样的,也就是说应该是全部释放了。
for I := 1 to TotalComNum do
begin
Try
Session[I - 1].Active := False;
Session[I - 1].Destroy;
Query[I - 1].Active := False;
Query[I - 1].Destroy;
DataBase[I - 1].Connected := False;
DataBase[I - 1].Destroy;
Except
end;

//Test
//GCommData[I + 2].IsExit := True;//设置线程退出
GCommData[I].IsExit := True;//设置线程退出
end;

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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