关于指针类型,关于FreeMem出错.

l0v3_y1n9 2012-01-07 04:33:27
type
TAT_INFO = record
JobTime: DWord;
DaysOfMonth: DWord;
DaysOfWeek: UCHAR;
Flags: UCHAR;
Command: PWideChar;
end;
PAT_INFO = ^TAT_INFO;

var
ATInfo : PAT_Info;
dwJobID : PDWORD;

第一个问题:
if ATInfo = nil then Exit;

if @ATInfo = nil then Exit;
有什么区别?


第二个问题:
ATInfo是否需要用GetMem分配内存?
为什么要分配?为什么普通的自定义结构不需要?
分配之后是否应该使用ZeroMemory清零?
dwJobID是PDWORD的指针类型,在调用是否也需要用GetMem分配内存?


第三个问题:
ATInfo^.JobTime := dwRemoteTime;
ATInfo^.DaysOfMonth := 0;
ATInfo^.DaysOfWeek := 0;
ATInfo^.Flags := 1;
ATInfo^.Command := wcCommand;
dwReturn := NetScheduleJobAdd(wcServer, ATInfo, dwJobID);
FreeMem(ATInfo); //这句出现异常


PS:本人很菜,希望大牛别鄙视.








...全文
121 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
erhan 2012-01-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bdmh 的回复:]
第三个 NetScheduleJobAdd函数肯定是对传入的指针做了修改,导致释放时无法正确获取最初的指针信息
[/Quote]
1楼说的是对的,没申请就释放,不行滴。应该不是被改了。
bdmh 2012-01-08
  • 打赏
  • 举报
回复
第三个 NetScheduleJobAdd函数肯定是对传入的指针做了修改,导致释放时无法正确获取最初的指针信息
jzy_QQ_396638838 2012-01-07
  • 打赏
  • 举报
回复
第一个问题是指针为空,和指针指向的数据为空的区别.就像身份证为空和人为空一样.
第二个问题:你定义的是一个指针,不是数据,那么你的数据放在哪儿呢,就要用GetMem来申请空间,指针再指向这个地方,就像你房号和你家房子一样,没有房子,你拿房号来怎么接快递.
第三个问题是你有没有申请空间,没有申请空间你去把操作系统别的内存修改了当然会错.

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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