だから、私は次の問題を抱えています。2つのPChar変数があります。最初にメモリを割り当て、いくつかの操作を行い、2番目の変数にメモリを割り当てます-このステップで、最初の変数に不正な値が含まれています(デバッグ中に見ました)。コードは次のとおりです。
procedure TReadThread.Execute;
Var
iRead, temp, i, count : Integer;
header, params : PChar;
begin
try
GetMem(header, 12);
iRead := recv(FSocket, header^, 12, 0);
if (iRead<>12) then
raise Exception.Create('Header recieving problem!');
temp := StrToIntDef(String(copy(header,3,4)),0);
if (temp=0) then
raise Exception.Create('Body receiving problem!');
count := temp*SizeOf(Char);
if (count+12<=16384) then
begin
GetMem(params, count);
iRead := recv(FSocket, params^, count, 0);
if (iRead<>count) then
raise Exception.Create('Cant recieve messsage fully!');
end
else
raise Exception.Create('Bad message size (>16 KB)!');
GetMem(FText, temp*SizeOf(Char)+12);
FText := PChar(String(header) + String(params));
FreeMem(header);
FreeMem(params);
except
on E : Exception do
ShowMessage(E.Message);
end;
end;
ライン上
iRead := recv(FSocket, params^, count, 0);
可変のHEADER値を探すと、手順の最初に見たときと同じではなく、驚くべきことがわかりました。どうすれば修正できますか?