-------------------------------------------------- Aleksandar Sarac mail1: Starija verzija procedure Anuliraj bi mogla da ostane, ako bi se napravile promene u Puta i PolinomNaN. Na primer, ovo je kod mene radilo: PROCEDURE Puta(p1, p2: Polinom; VAR pr: Polinom); VAR pomocni: Polinom; BEGIN Anuliraj(pr); pomocni := NIL; IF (p1 <> NIL) AND (p2 <> NIL) THEN Linija "pomocni := NIL;": bez nje je promenljiva "pomocni" imala neku neobičnu vrednost s kojom se procedura DisposePolinom bezveze prošetala memorijom, saplela se i oborila program. Ovakva procedura PolinomNaN mi je radila: PROCEDURE PolinomNaN(p: Polinom; n: CARDINAL; VAR rez: Polinom); VAR i: CARDINAL; pom : Polinom; BEGIN IF n = 0 THEN NEW(rez); rez^.k := 1.0; rez^.st := 0; rez^.veza := NIL; (* ELSIF n = 1 THEN Kopiraj( p, rez );*) ELSE (*rez := p;*) Kopiraj(p, rez); (* za n = 1 *) FOR i := 2 TO n DO Kopiraj(rez, pom); (*Puta(rez, p, rez)*) Puta(pom, p, rez); Anuliraj(pom) END END END PolinomNaN; mail2: U proceduri Puta je deklarisana promenljiva pomocni, koja, izgleda, dobije vrednost koja god se našla u memoriji u tom trenutku. Zatim se pozove MonomPuta(p1, p2, pomocni); i na samom početku te procedure se poziva Anuliraj. Ako se u memoriji našlo nešto, pa pomocni nije NIL, DisposePolinom pokuša da oslobodi memoriju s ko zna kakvim vrednostima pokazivača i padne program. Mislim da je to problem jer procedura "proradi" čim se na samom početku izvrši pomocni := NIL. Čini mi se da je glavni problem to što kompajler dozvoljava upotrebu neinicijalizovanih promenljiva. Isto, u proceduri Puta: poziva se MonomPuta(p1, p2, pomocni); u kojoj se napravi novi polinom na koji pokazuje pomocni, pa se ubacuju monomi, ali se ne oslobađa memorija. REPEAT UbaciMonom(pomocni, pr); pomocni := pomocni^.veza UNTIL pomocni = NIL; Možda bi moglo, na primer, da se napiše procedura koja bi radila isto što i pomocni := pomocni^.veza, ali bi i oslobađala memoriju: PROCEDURE AnulirajPrvi(VAR p : Polinom); VAR pom : Polinom; BEGIN IF p # NIL THEN pom := p; p := p^.veza; DISPOSE(pom) END END AnulirajPrvi; pa bi kod ubacivanja monoma moglo da stoji: REPEAT UbaciMonom(pomocni, pr); (*pomocni := pomocni^.veza*) AnulirajPrvi(pomocni) UNTIL pomocni = NIL; doni: zapravo bolje ovo poslednje sa SaberiNa i DisposePolinom -------------------------------------------------- doni:srediti polinome jos malo doni: liste - dodati nesto gde se brise vise elemenata u istom prolazu. doni:ubaciti negde primer kako radi Compare za stringove