Текущий архив: 2006.06.04;
Скачать: CL | DM;
ВнизПомогите разобраться с pchar Найти похожие ветки
← →
DesperadO666 © (2006-05-16 16:48) [0]Такая незадача....
Вот кусок кода,
где f : file
FindBlock(StartBlock) - процедура определяющая глобальные переменные
StartBlock и EndBlock
procedure TForm1.Button1Click(Sender: TObject);
var
pbuf2:pchar;
begin
FindBlock(StartBlock);
pbuf2:=nil;
GetMem(pbuf2,(EndBlock-StartBlock));
ShowMessage("strlen(pbuf2) - "+inttostr(strlen(pbuf2)));
seek(f,StartBlock);
BlockRead(f,pBuf2^,(EndBlock-StartBlock));
memo2.Clear;
memo2.Lines.Add(string(pBuf2));
Freemem(pbuf2);
end;
При первом заходе в процедуру
ShowMessage говорит что размер pbuf2=0, а при последующих то 2 то 3 то 0... И После считывания (EndBlock-StartBlock) байт у меня получается чуть больше, на величину какого-то "мусора" в pbuf2
← →
Сергей М. © (2006-05-16 16:51) [1]
> ShowMessage говорит что размер pbuf2=0, а при последующих
> то 2 то 3 то 0.
А сколько доллжнго "говорить" по-твоему ?
← →
DesperadO666 © (2006-05-16 17:10) [2]По-моему 0, если еще не выполнилась строчка
BlockRead(f,pBuf2^,(EndBlock-StartBlock));
← →
MetalFan © (2006-05-16 17:35) [3]а ты уверен, что выделенная память не содержит мусора?!
сделай после GetMem
ZeroMemory
посмотри, как strLen работает ;)
← →
MBo © (2006-05-16 17:35) [4]А как, по-твоему, работает strlen?
Эта функция просто ищет #0, а GetMem не обязана заполнять нулями буфер, так что там может быть мусор.
← →
MetalFan © (2006-05-16 18:22) [5]
> А как, по-твоему, работает strlen?
> Эта функция просто ищет #0, а GetMem не обязана заполнять
> нулями буфер, так что там может быть мусор.
если это мне, то я как раз и имел ввиду то, что в выделеной памяти может находиться мусор, и strLen соотв. работать нормально не будет...
← →
MBo © (2006-05-16 18:46) [6]>MetalFan
Нет, автору. Твоего поста еще не видел, когда писал.
← →
DesperadO666 © (2006-05-16 19:24) [7]MetalFan MBo
Спасибо.
Страницы: 1 вся ветка
Текущий архив: 2006.06.04;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.048 c