解决方案 »
- for循环语句奇怪的自己倒序了是什么原因
- 我想固定dbehlib表格的某一列
- DELPHI数据库连接池
- 關於DBGridEH 的排序問題 ,在線等待,100分答謝!
- 在一个表中选择到符合条件的记录后放到dbgrid中,然后供用户再从中挑选,最后存入另外一个表中,怎么做??
- 一个问题,搞的我好几个星期了,请delphi大人帮帮忙,在这先谢了。
- 求助哪位高手帮我修改一下极速浏览器一个小地方
- <delphi 5.x ado/mts/com+ 高级程序设计篇>的一个问题?
- 一个笑话
- 请教关于delphi的两个问题!!
- 请求解决:已动态创建了GroupBox,Memo,CheckBox如何将CheckBox名添加对应的Memo
- 请教:DELPHI7动态连接SQL SERVER2008
var
TempP, OutP, tempp1, outp1: PChar;
TempS, Outstr: string;
I: Integer;
begin
TempP := StrAlloc(1024); //申请1KB内存,并将TempP指向这块内存
ShowMessage(Format('TempP的地址为:%p',[Pointer(TempP)]));
TempS := TempS + '12344545454'; //为TempS赋新值,导致一次CopyOnWrite
ShowMessage(Format('TempS的地址为:%p',[Pointer(TempS)]));
TempP := PChar(TempS); //将TempP指向TempS的地址(TempP指向的原1KB内存无法释放了,因为没有指针可以指向它了)
ShowMessage(Format('TempS的地址为:%p%sTempP新地址为:%P',[Pointer(TempS),#13#10,Pointer(TempP)]));
Outstr := StrPas(TempP);
StrDispose(TempP); //TempP指向的地址根本不是你手动申请的,它是CopyOnWrite后的string,无法用StrDispose释放
Edit1.Text := Outstr;
end;
var
TempP, OutP: PChar;
TempS, Outstr: string;
begin
TempP := StrAlloc(1024); // 申请1KB内存,并将TempP指向这块内存
OutP := TempP; // 虽然下面的代码将TempP指向新地址(导致内存泄露),好在这里用OutP指向了这1KB内存,后面还是可以释放这块内存的
ShowMessage(Format('TempP保存的地址为:%p', [Pointer(TempP)]));
TempS := TempS + '12344545454'; // 为TempS赋新值,导致一次CopyOnWrite
ShowMessage(Format('TempS保存的地址为:%p', [Pointer(TempS)]));
TempP := PChar(TempS); // 将TempP指向TempS的地址
ShowMessage(Format('TempS保存的地址为:%p%sTempP保存的新地址为:%P', [Pointer(TempS), #13#10,Pointer(TempP)]));
Outstr := StrPas(TempP);
StrDispose(OutP); //幸好之前用OutP指向了这块内存,不然这1KB内存就泄露了
Edit1.Text := Outstr;
end;
var
TempP,OutP,tempp1,outp1:PChar;
TempS,Outstr:string;
I:Integer;
begin
TempP:=StrAlloc(1024);
TempS:=TempS+'12344545454';
StrPCopy(TempP, TempS);
Outstr:=StrPas(TempP);
StrDispose(TempP);
Edit1.Text:=Outstr;
end;
这样修改,就可以了。