(1)
GetMem(P, 512) GetMem(P, 1024) <---- 是释放先前的P后再重新分配1024吗?FreeMem(P)
(2)
GetMem(P, 512) GetMem(P, 256) <---- 是释放先前的P后再重新分配256吗?FreeMem(P)
GetMem(P, 512) GetMem(P, 1024) <---- 是释放先前的P后再重新分配1024吗?FreeMem(P)
(2)
GetMem(P, 512) GetMem(P, 256) <---- 是释放先前的P后再重新分配256吗?FreeMem(P)
解决方案 »
- 求教 :怎麼讓水平滾動條居中
- 以下是我的一段代码,如何随时终止线程?
- ××××一直的寻求,到底有没有×××××
- 请教数组写入文件的方法。
- String literals may have at most 255 elements 何解???
- BDE+ORACLE,TQuery的RequestLive不能设为True?
- Tadoquery中参数返回的问题
- DELPHI通用技术问题,考验您的技术深度,如何实现DBGRID或DBGRIDEH中代码字段的代码和名称的显示
- 关于canvas does not allow drawing 错误的成因
- 小弟的代码错在哪里了,大侠进来看看。
- TreeView中节点来自于ADOQuery1,如何才能使每个节点能保存对应的ADOQuery1.RecordNo 信息?
- 子窗体释放后程序主窗口不能获得焦点,程序暂停,怎么解决?
procedure TForm1.Button1Click(Sender: TObject);
var
p:pchar;
begin
getmem(p,10);
p:='aaaaaaaaa';
showmessage(p);
getmem(p,15);
showmessage(p); //因为没有赋值,所以随机,多点几次就可以看出来
end;
var
p: pchar;
p2: pchar;
begin
GetMem(p, 10);
p := 'aaaaaaaaa';
p2 := p; //先把p2 保存这个p 的地址
GetMem(p,100);
p := 'asdfasdfasdfasdfdsfasdfasdfasdfasdfasdfasdf';//改变它
ShowMessage(p2); //看p2,就是原地址,多试几次
end;
F: file;
Size: Integer;
Buffer: PChar;
begin
AssignFile(F, 'c:\test.txt');
Reset(F, 1);
try
Size := FileSize(F);
GetMem(Buffer, Size);
try
BlockRead(F, Buffer^, Size);
Memo1.Lines.Text:=Buffer;
// ProcessFile(Buffer, Size);
GetMem(Buffer,Size);
Memo2.Lines.Text:=Buffer;
finally
FreeMem(Buffer);
end;
finally
CloseFile(F);
end;
end;
原来的内容已经不在了,说明已经重新分配了地址。
F: file;
Size: Integer;
Buffer: PChar;
Buffer2:Pchar;
begin
AssignFile(F, 'c:\test.txt');
Reset(F, 1);
try
Size := FileSize(F);
GetMem(Buffer, Size);
Buffer2:=Buffer;
try
BlockRead(F, Buffer^, Size);
Memo1.Lines.Text:=Buffer;
// ProcessFile(Buffer, Size);
GetMem(Buffer,Size);
finally
FreeMem(Buffer);
end;
Memo2.Lines.Text:=Buffer2;
finally
CloseFile(F);
end;
end;
虽然重新分配了新的地址,通过Buffer2可以看出旧地址的内容还在,还没有释放。
F: file;
Size: Integer;
Buffer: PChar;
Buffer2:Pchar;
Buffer3:PChar;
begin
AssignFile(F, 'c:\test.txt');
Reset(F, 1);
try
Size := FileSize(F);
GetMem(Buffer, Size); //第一次申请
Buffer2:=Buffer; //将Buffer2指向和Buffer同样的地址空间
try
BlockRead(F, Buffer^, Size);
Memo1.Lines.Text:=Buffer;
// ProcessFile(Buffer, Size);
GetMem(Buffer,Size); //重新分配了新的地址,新的空间
finally
FreeMem(Buffer); //这个时候释放的是后来分配的空间
end;
Memo2.Lines.Text:=Buffer2; //从这里可以看出原来分配的空间并未释放
Buffer3:=Buffer2;
FreeMem(Buffer3); //这个时候才释放了原来分配的空间=FreeMem(Buffer2);
Memo3.lines.text:=Buffer2; //已经找不到原来的内容了
finally
CloseFile(F);
end;
end;