Проблема с переполнением кучи. - Pascal

Узнай цену своей работы

Формулировка задачи:

Это алгоритм затравочного заполнения 4хсвязной гранично-определенной области. В программе происходит переполнение кучи. Черт! Подскажите, что можно придумать, чтобы избежать этого?

Решение задачи: «Проблема с переполнением кучи.»

textual
Листинг программы
uses crt,graph;
Type ukazat=^S;
  S=record
    inf:integer;
    Next:ukazat;
  end;
var
u1,u2,u3,u4:ukazat;
x1,y1,x2,y2:integer;
k:integer;
p,pp:byte;
o:boolean;
Procedure abc(p,pp:integer);
begin
      u1:=u3;
      u1^.inf:=x1+p;
      new(u1^.next);
      u1^.next^.inf:=y1+pp;
      putpixel(x1+p,y1+pp,10);
      new(u1^.next^.next);
      u1:=u1^.next^.next;
      u3:=u1;
      inc(k);
end;
begin
 initgraph(x1,y1,'');
 Setcolor(10);
 rectangle(10,100,100,200); x1:=11;y1:=120;
 k:=0;
 new(u1);
 u3:=u1;u4:=u1;
 abc(0,0);
 readkey;
 while k<>0 do
  begin
    u1:=u4;
    x1:=u1^.inf; y1:=u1^.next^.inf;
    if getpixel(x1-1,y1)=0 then abc(-1,0);
    if getpixel(x1+1,y1)=0 then abc(1,0);
    if getpixel(x1,y1-1)=0 then abc(0,-1);
    if getpixel(x1,y1+1)=0 then abc(0,1);
    u1:=u4; u2:=u1; u1:=u1^.next; dispose(u2);
    dec(k);
    u2:=u1; u1:=u1^.next; dispose(u2); u4:=u1;
  end;
 readln;
end.

Объяснение кода листинга программы

  1. Объявлены переменные:
    • u1, u2, u3, u4: указатель на структуру S;
    • x1, y1, x2, y2: целочисленный тип;
    • k: целочисленный тип;
    • p, pp: байтовый тип;
    • o: логический тип;
    • S: тип, определенный пользователем, являющийся записью с полями inf: integer и Next: указатель на S.
  2. Вызов функции new для выделения памяти под указатель u1^.next^.next.
  3. В функции abc присваиваются значения указателям u1, u1^.next и u1^.next^.next, а также вызывается функция new для выделения памяти под указатель u1^.next^.next^.next.
  4. В цикле while происходит движение указателей по связному списку, начиная с u4, и вызов функции abc с аргументами -1 и 0, если соответствующая клетка на экране пуста.
  5. После выхода из цикла while выполняется чтение ключа с помощью функции readkey.
  6. В конце программы выводится сообщение readln.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

Оцени полезность:

8   голосов , оценка 3.75 из 5