nightstalker Opublikowano 11 Marca 2006 Zgłoś Opublikowano 11 Marca 2006 (edytowane) Myslełem że juz zrozumiałem o co chodiz z tymi wskaźnikami, ale chyba się myliłem. Program ma losowac 10 punktów (x,y) i zapisywać ich adresy do tablicy. Punkt zadeklarowany jako rekord. Tablica jako tablica wskaznikow na rekord. Program ładnie losuje 10 punkcików, ale wypisuje 10 razy ten sam ( ostatnio wylosowany punkt ). Nie wiem gdzie tkwi problem... W losowaniu czy w wypisywaniu ( są 2 funkcje ) Pomoże ktoś ? program punkty;{$APPTYPE CONSOLE}uses SysUtils;typeTPunkt = recordx,y:integer;end;PPunkt = ^TPunkt;TTab = array[1..10] of PPunkt;var tab:Ttab; punkt:PPunkt;procedure losuj(var tab:Ttab);var i:integer;beginfor i:=1 to 10 dobeginif i > 10 then exit;if tab[i] = nil thenbeginnew(punkt);punkt^.x := random(10);punkt^.y := random(10);writeln('Wylosowano punkt : x',i,' = ',punkt^.x);writeln('Wylosowano punkt : y',i,' = ',punkt^.y);tab[i]:= @punkt;dispose(punkt);end;end;end;procedure wypisz(tab:Ttab);var i:integer;beginfor i:=1 to 10 dobeginif tab[i] <> nil thenbeginwriteln('Punkt x',i,' = ',tab[i]^.x);writeln('Punkt y',i,' = ',tab[i]^.y);end;end;end;begin randomize; losuj(tab); wypisz(tab); readln;end. EDIT: Qwa... Znowu mnie oświeciło dopiero po tym jak napisałem posta... Skumałem że w losowaniu mam new i zaraz dispose, czyli ze rezerwuje i zwalniam pamięć co chwile, a pozniej program juz nie ma do niej dostepu. Wywaliłem więc dispose i wkleiłem na końcu programu i działa, ale mam w związku z tym pytanie... Czy zwalniany jest jednoczesnie caly obszar pamieci ktory zarezerwowałem wywołując 10 razy new ? Czy działa to jakoś inaczej ? Prosze, niech mi to ktoś wytłumaczy... Edytowane 11 Marca 2006 przez nightstalker Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...