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:本人很菜,希望大牛别鄙视.

解决方案 »

  1.   

    第一个问题是指针为空,和指针指向的数据为空的区别.就像身份证为空和人为空一样.
    第二个问题:你定义的是一个指针,不是数据,那么你的数据放在哪儿呢,就要用GetMem来申请空间,指针再指向这个地方,就像你房号和你家房子一样,没有房子,你拿房号来怎么接快递.
    第三个问题是你有没有申请空间,没有申请空间你去把操作系统别的内存修改了当然会错.
      

  2.   

    第三个 NetScheduleJobAdd函数肯定是对传入的指针做了修改,导致释放时无法正确获取最初的指针信息