SetLength(Var,10) 内存溢出? 诡异的问题(100分)

  • 主题发起人 主题发起人 gfwlxx
  • 开始时间 开始时间
G

gfwlxx

Unregistered / Unconfirmed
GUEST, unregistred user!
代码:
function PsList:String;
var
    List:Tstringlist;
    isOK:Boolean;
    ProcessHandle:Thandle;
    ProcessStruct:TProcessEntry32;
    Ps,Pid:String;
begin
     List:=Tstringlist.Create;  //创建列表
     ProcessHandle:=createtoolhelp32snapshot(Th32cs_snapprocess,0);  //快照
     processStruct.dwSize:=sizeof(ProcessStruct);  //设置
     isOK:=process32first(ProcessHandle,ProcessStruct);  //初始化
     List.Add('PID' +'         '+ 'Process'); //第一行,
     while isOK do  //循环
     begin
     Ps:=ProcessStruct.szExeFile;  //进程名
     Pid:=IntToStr(ProcessStruct.th32ProcessID); //进程PID
     SetLength(Pid,12);   //固定长度

	  //   IntToStr(ProcessStruct.cntThreads));//线程数--------3
	  //   IntToStr(ProcessStruct.pcPriClassBase));//优先级-4
	  //   IntToStr(ProcessStruct.th32ParentProcessID));//父进程ID-5
     //List.Add(Pid+PsPath(StrToInt(Pid)));
              List.Add(Pid+'AAAAAAAAAAAAAA');
	   isOK:=process32next(ProcessHandle,ProcessStruct);
     end;
     Result:=List.text;
     CloseHandle(ProcessHandle);
     List.Free;
end;

writeln(pslist);
readln;

锁定错误语句在setlength,这!
大家

运行结果在cmd复制到文本会发现有很多回车,不知道为什么
帮帮忙吧 unit taskmgr 我都写一天了
 
Var
Pid:String[12];
这样定义变量就可以了。
 
内存嗷嗷报错
 
试试
Var
Pid : Array of Char;

或者这两句换下位置
Pid:=IntToStr(ProcessStruct.th32ProcessID); //进程PID
SetLength(Pid,12); //固定长度
 
Var
Pid : Array of Char;
才适合用
SetLength(Pid,12);


Pid:String;
要用SetString(...);
 
楼上正解
 
我看了例子,你是不是想要对齐的功能?
 
SetLength
对字符串 应该 没问题
 
但是 SetLength 会重新 分配 内存
你原来的 PID 就没有了
 
//SetLength(Pid, 12); //固定长度

Pid:=format('%-12s',[Pid]);
 
或者 你这样写 也可以

s_tmp := IntToStr(ProcessStruct.th32ProcessID); //进程PID

SetLength(Pid, 12); //固定长度
FillChar(Pid[1], 12, Ord(' '));
move(s_tmp[1], Pid[1], length(s_tmp));
 
感谢大会儿的回答

但是没一个能用的,内存熬熬报错
拜托自己运行下在答0....
 
垃圾贴,鉴定完毕。。。。
 
后退
顶部