thread 안에서 pointer를 사용했는데 이상한 결과가 나옵니다. 아래는
질문을 위해서 간소화시킨 source인데요...
Type
Ttestthread = class(TThread)
global_p : PChar;
gsize : integer;
constructor Create(data : PChar; size : integer);
procedure Execute; override;
end;
var
testthread : Ttestthread;
implementation
consturctor Ttestthread.Create(data : PChar; size : integer);
begin
global_p := data;
gsize := size;
㉠
end;
procedure Ttestthread.Execute;
begin
㉡
end;
end.
㉠ 에서 global_p 와 gsize를 출력해보면 parameter로 넘어온 값이 온전히
찍힙니다. 그런데 ㉡ 에서 찍어보면 쓰레기 값이 나오네요. 생각을 해봐도
왜 이렇게 되는 것인지 잘 모르겠습니다. global_p를 string으로 선언해서
같은 동작을 시켜보면 온전하게 나오더군요. constructor에서 받아들인
포인터값을 Execute에서는 왜 이상하게 나올까요?