Q&A

  • thread 안에서의 pointer 오동작.
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에서는 왜 이상하게 나올까요?





0  COMMENTS