Почему то когда в очереди 2 элемента все работает, а когда заношу третий что то идет не так(

программирование Delphi

procedure TForm1.Button1Click(Sender: TObject); //кнопка созданиея процесса
var
name:char;
size,g,i,nachI,j:integer;
add,est:bool;
tek,tmp:point;
begin
randomize;
est:=true;
while est do begin
est:=false;
name:=char(random(26)+byte('A'));
for j:=0 to memory do if OZU[j]=name then est:=true;
end;
edit1.Text:=name; //выводим его в едит1
size:=random(round(memory/BLOCKsize)); //размер тоже случаен
edit2.Text:=inttostr(size); //выводи в едит2
tek:=proc; //add хранит был ли добавлен процесс
while tek<>nil do begin //пока не просмотрим все блоки
if tek.PID=-1 then
begin //если нашли пустой блок(мы проверяем первый байт каждого блока)
nachI:=tek.beg; //то сохраняем первый свободный блок
if tek.long>=size then
begin
//если досточно памяти для добавления, то
tek^.beg:=nachI+size;
tek^.long:=proc.long-size-nachI; if tek^.long<=0 then
tek^.long:=0;
getmem(tmp, sizeof(block));
tmp^.pnext:=tek;
tmp^.PID:=pid;
inc (pid); //заполняем память процессом
tmp^.name:=name;
tmp^.beg:=nachI;
tmp^.long:=size;

proc:=tmp;
break; //выходим из цикла, так как процесс уже был добавлен
end
else begin
showmessage('Недостаточно памяти для создания процесса '+name+' !!!'); break end;

end
else
tek:=tek^.pnext;
end;

total;
end;



procedure total(); //обновление данных
var
tmp:point;
begin
with form1 do begin //работаем с формой1
Memo1.Clear; //очистим мемо1
Image1.Canvas.Brush.Color:=clyellow; //цвет закраски изображения сверху - зеленый
image1.Canvas.Rectangle(0,0,1000,30); //закрашиваем его в зеленый цвет полностью
Image1.Canvas.Brush.Color:=clblue; //ставим красный цвет
tmp:=proc;
while tmp<>nil do
begin //пока есть блоки в памяти
if tmp.PID<>-1 then
image1.Canvas.Rectangle(trunc(tmp.beg*(form1.Image1.Width/(memory*BLOCKsize))),0,trunc((tmp.long-proc.beg)*(form1.Image1.Width/memory*BLOCKsize)),30); //зарисовывем какой участок памяти занят красным цветом
Memo1.Lines.Add(inttostr(tmp.pid)+':__ИМЯ: "'+tmp.name+'"; нач.:'+inttostr(tmp.beg)+'; длина: '+inttostr(tmp.long)); //выводим информацию о занятых блоках
tmp:=tmp^.pnext;
end;
end;
end;
Ответы:
Гм, коллега... У Вас установлен отладчик в голове? У меня, например, нет. Поэтому узнать что именно там идет не так и как должно идти, нет никакой возможности.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.