以前用结构(Record)一直没注意要定义string的长度.因为以前没怎么出过错误.一直用的好好的.
但是悲剧昨天下午发生了.我的例子是这样的.首先我有2个自定义结构
TLoginInfo = packed record
btType: Byte;
sUserName: string[15]; //之前是没有定义长度
sPassword: string[32]; //之前是没有定义长度
end;
pTLoginInfo = ^TLoginInfo; TThreadFunc = packed record
btFuncID: Byte;
Param: Pointer;
Owner: TObject;
end;
pTThreadFunc = ^TThreadFunc;我的代码
New(pLoginInfo); // 新建一个登录信息处理的内存指针
if pLoginInfo <> nil then
begin
nCode := -5;
pLoginInfo.btType := btType; // 赋值
pLoginInfo.sUserName := sUserName; // 赋值
pLoginInfo.sPassword := sPassword; // 赋值
nCode := -6;
g_DataBaseThread.NewDBFunc(DBFUNC_UL, pLoginInfo, Self); // 将该指针交给数据处理线程执行
end
else
Raise Exception.Create('New(pLoginInfo) Failed');先申请了一个pTLoginInfo.接着g_DataBaseThread.NewDBFunc的时候又会申请一个pTThreadFunc.这时候如果pTLoginInfo的string没有定义长度.那么后面这个就会受一定的影响申请内存时偶尔会越界这个问题导致我昨天下午调试到刚才.现在总算解决了.不过要感谢2个朋友帮助我学习到了 事件堵塞(这个项目不打算用.还是继续用唤醒休眠的循环.那个还没完全掌握.昨天测试偶尔会泄露内存) 和 OutputDebugString
见帖:http://topic.csdn.net/u/20100719/16/e8d71d2b-21a9-4165-a7fc-88fc8ef84a3c.html?seed=1024582840&r=67095391#r_67095391没啥分了这个散40分吧..NND
但是悲剧昨天下午发生了.我的例子是这样的.首先我有2个自定义结构
TLoginInfo = packed record
btType: Byte;
sUserName: string[15]; //之前是没有定义长度
sPassword: string[32]; //之前是没有定义长度
end;
pTLoginInfo = ^TLoginInfo; TThreadFunc = packed record
btFuncID: Byte;
Param: Pointer;
Owner: TObject;
end;
pTThreadFunc = ^TThreadFunc;我的代码
New(pLoginInfo); // 新建一个登录信息处理的内存指针
if pLoginInfo <> nil then
begin
nCode := -5;
pLoginInfo.btType := btType; // 赋值
pLoginInfo.sUserName := sUserName; // 赋值
pLoginInfo.sPassword := sPassword; // 赋值
nCode := -6;
g_DataBaseThread.NewDBFunc(DBFUNC_UL, pLoginInfo, Self); // 将该指针交给数据处理线程执行
end
else
Raise Exception.Create('New(pLoginInfo) Failed');先申请了一个pTLoginInfo.接着g_DataBaseThread.NewDBFunc的时候又会申请一个pTThreadFunc.这时候如果pTLoginInfo的string没有定义长度.那么后面这个就会受一定的影响申请内存时偶尔会越界这个问题导致我昨天下午调试到刚才.现在总算解决了.不过要感谢2个朋友帮助我学习到了 事件堵塞(这个项目不打算用.还是继续用唤醒休眠的循环.那个还没完全掌握.昨天测试偶尔会泄露内存) 和 OutputDebugString
见帖:http://topic.csdn.net/u/20100719/16/e8d71d2b-21a9-4165-a7fc-88fc8ef84a3c.html?seed=1024582840&r=67095391#r_67095391没啥分了这个散40分吧..NND
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货