Итак, у меня следующая проблема. У меня есть 2 переменные PChar. Выделяю память под первую, делаю какие-то операции, выделяю память под вторую переменную - и на этом шаге первая переменная содержит неверное значение (видел при отладке). Вот код:
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 — я увидел что-то удивительное — не то же самое, что я видел в начале процедуры. Как я могу это исправить?
SizeOf(Char)
наSizeOf(AnsiChar)
? - person Johan   schedule 22.05.2011