procedure TestProc;
var
TestS: PChar;
begin
AllocMem(TestC, 7);
TestC := 'A Test'#0
MessageBox(0, TestC, TestC);
FreeMem(TestC);
end;这个代码有问题吗?问题在哪里?
var
TestS: PChar;
begin
AllocMem(TestC, 7);
TestC := 'A Test'#0
MessageBox(0, TestC, TestC);
FreeMem(TestC);
end;这个代码有问题吗?问题在哪里?
TestS: PChar;<----------TestC 呵呵,你在逗我呀??!MSN上N久不见你了
var
TestC: PChar;
begin
// TestC := AllocMem(7);
TestC := 'A Test'#0;
MessageBox(0, TestC, TestC, MB_OK);
// FreeMem(TestC);
end;
procedure TestProc;
var
Testc: PChar;
tmp:^pchar;
begin
tmp:=AllocMem(7);
Testc:=tmp^;
TestC := 'A Test'#0;
MessageBox(0, TestC, TestC, MB_OK);
FreeMem(tmp);
end;
你测试一下!呵呵!
呵呵你的是没错,不过,嘿嘿!你还是没搞清楚本质!
FreeMem 只释放指针的..........
var
TestC: PChar;
begin
TestC := AllocMem(7);
StrCopy(@TestC[0], 'A Test'#0);
ShowMessage(TestC);
FreeMem(TestC);
end;
var
TestS: PChar;
begin
TestS := AllocMem(7);
ShowMessage(IntToStr(Integer(TestS)));
TestS := 'A Test'#0;
ShowMessage(IntToStr(Integer(TestS)));
//FreeMem(TestS);
end;
你看看就知道了,'A Test'做为常量字符串有自己的地址,
TestS := 'A Test'#0;
这种赋值只是简单的把指针指向了该常量,而并没有使用你所分配的内存;
所以写程序时,如果使用AllocMem给PChar分配内存后,千万别直接用字符常量赋值!
var
TestC: PChar;
2.
TestC := AllocMem(7);
3.
MessageBox(0, TestC, TestC, MB_OK);
4.
TestC := 'A Test'#0
应加;
但
5.最不该的是
不应该
TestC := 'A Test'#0
这样
TestC指向数据段的内存,为只读的内存
FreeMem会产生AV错误
改为
StrCopy(TestC, 'A Test');
就这些