amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > GadGets [ - Suche - Neue Beiträge - Registrieren - Login - ]

1 -2- [ - Beitrag schreiben - ]

31.12.2006, 23:42 Uhr

Ralf27
Posts: 2779
Nutzer
Ich hab irgendwo in der folgenden Routine ein Speicherleck. Das ganze läuft zwar und alles so wie ich es will, aber seit ich diese Routine habe gibt es laufend nach dem Aufruf der Routine unerklärliche Abstürze. Ich weis da nicht weiter. Ich hoffe Ihr könnt mir da helfen. Hier erst mal der entsprechende Codeschnipsel:

code:
NetzwerkStarten:
 IF tcp_game& THEN RETURN
 CONST GID_IP=1
 CONST GID_Port=2
 CONST GID_Abbruch=3
 CONST GID_Server=4
 CONST GID_Client=5

 ng&=AllocMem&(NewGadget_sizeof%,MEMF_PUBLIC&+MEMF_CLEAR&)
 IF ng&=0 THEN RETURN

 x=PEEK(scr&+WBorLeft%)
 y=PEEK(scr&+WBorTop%)+PEEK(scr&+BarHeight%)
 bt=PEEKW(scr&+RastPort%+TxWidth%)
 ht=PEEKW(scr&+RastPort%+TxHeight%)
 maxb=30*bt

 glist&=0
 gad&=CreateContext&(VARPTR(glist&))
 VInfo&=GetVisualInfoA&(scr&,0)
 POKEL ng&+ng_VisualInfo%,VInfo&
 POKEL ng&+ng_TextAttr%,PEEKL(scr&+ScreenFont%)
 POKEL ng&+ng_GadgetText%,0
 POKEW ng&+ng_Flags%,0

 POKEW ng&+ng_LeftEdge%,x
 POKEW ng&+ng_TopEdge%,y
 POKEW ng&+ng_Width%,x+maxb2-4
 POKEW ng&+ng_Height%,ht+4
 POKEW ng&+ng_GadgetID%,GID_IP
 TAGLIST tagsl&,GTST_String&,"localhost",TAG_END&
 gad&=CreateGadgetA&(STRING_KIND&,gad&,ng&,tagsl&)

 POKEW ng&+ng_LeftEdge%,x+maxb2+2
 POKEW ng&+ng_GadgetID%,GID_Port
 TAGLIST tagsl&,GTST_String&,"9999",TAG_END&
 gad&=CreateGadgetA&(STRING_KIND&,gad&,ng&,tagsl&)

 POKEW ng&+ng_TopEdge%,y+ht+10
 POKEW ng&+ng_LeftEdge%,x
 POKEW ng&+ng_Width%,maxb3
 POKEL ng&+ng_GadgetText%,SADD("Abbruch"+CHR$(0))
 POKEW ng&+ng_GadgetID%,GID_Abbruch
 gad&=CreateGadgetA&(BUTTON_KIND&,gad&,ng&,0)

 POKEW ng&+ng_LeftEdge%,x+maxb3
 POKEL ng&+ng_GadgetText%,SADD("Server"+CHR$(0))
 POKEW ng&+ng_GadgetID%,GID_Server
 gad&=CreateGadgetA&(BUTTON_KIND&,gad&,ng&,0)

 POKEW ng&+ng_LeftEdge%,x+(maxb3)*2
 POKEL ng&+ng_GadgetText%,SADD("Client"+CHR$(0))
 POKEW ng&+ng_GadgetID%,GID_Client
 gad&=CreateGadgetA&(BUTTON_KIND&,gad&,ng&,0)

 IF gad& THEN
  x=maxb+1
  y=ht*2+14+1
  TAGLIST tagsl&, _
  WA_InnerWidth&, x, _
  WA_InnerHeight&, y, _
  WA_Left&, (PEEKW(scr&+ScreenWidth%)-x)2, _
  WA_Top&, (PEEKW(scr&+ScreenHeight%)-y)2, _
  WA_PubScreen&, scr&, _
  WA_Title&, "Netzwerk", _
  WA_Flags&,WFLG_CLOSEGADGET& OR WFLG_DRAGBAR& OR WFLG_DEPTHGADGET& OR WFLG_ACTIVATE&, _
  WA_IDCMP&,IDCMP_CLOSEWINDOW& OR IDCMP_VANILLAKEY& OR BUTTONIDCMP& OR CYCLEIDCMP&, _
  WA_Gadgets&,glist&, _
  TAG_END&
  nwin&=OpenWindowTagList&(0,tagsl&)
  IF nwin& THEN

   a&=PEEKL(nwin&+UserPort%)
   GT_RefreshWindow nwin&,0
   IP$="localhost"
   Port$="9999"
   go=-1
   WHILE go=-1
    junk=WaitPort&(a&)
    msg&=GT_GetIMsg&(a&)
    IF msg& THEN
     Class&=PEEKL(msg&+Class%)
     SELECT CASE Class&
     CASE IDCMP_GADGETUP&
      gad&=PEEKL(msg&+IAddress%)
      ID&=PEEKW(gad&+GadGetGadGetID%)
      SELECT CASE ID&
      CASE GID_IP
       t&=0
       TAGLIST tagsl&,GTST_String&,VARPTR(t&),TAG_END&
       junk=GT_GetGadgetAttrsA(gad&,nwin&,0,tagsl&)
       IP$=PEEK$(t&)
      CASE GID_Port
       t&=0
       TAGLIST tagsl&,GTST_String&,VARPTR(t&),TAG_END&
       junk=GT_GetGadgetAttrsA(gad&,nwin&,0,tagsl&)
       Port$=PEEK$(t&)
      CASE GID_Abbruch
       go=0
      CASE GID_Server
       go=1
      CASE GID_Client
       go=2
      END SELECT
     CASE IDCMP_VANILLAKEY&
      go=0
     CASE IDCMP_CLOSEWINDOW&
      go=0
     END SELECT
     GT_ReplyIMsg msg&
    END IF
   WEND
  END IF
 END IF
 msg&=0
 IF nwin& THEN CloseWindow nwin&
 IF glist& THEN FreeGadgets glist&
 IF VInfo& THEN FreeVisualInfo VInfo&
 IF ng& THEN FreeMem ng&,NewGadget_sizeof%


Mir ist aber auch klar das die Fensterpositionberechnung nicht ganz korrekt läuft und nur ca. die Mitte des Screens erreicht. Aber das dürfte ja nicht so tragisch sein.
Die Frage ist nur, wo ist da ein Speicherleck?
Ich hab auch schon nachgesehn ob es eventuell eine Variablenüberschneidung gibt, dies ist aber nicht der Fall.

So, jetzt aber erst mal noch ein schönes Fest! Feiert schön :rotate:

EDIT: Kurz mal etwas das Programm aufgelockert.

--
http://www.alternativercomputerclub.de.vu

[ Dieser Beitrag wurde von Ralf27 am 31.12.2006 um 23:50 Uhr geändert. ]

[ Dieser Beitrag wurde von Ralf27 am 01.01.2007 um 20:07 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

01.01.2007, 19:55 Uhr

Holger
Posts: 8116
Nutzer
@Ralf27:
Schon mal was von Unterprogrammen gehört?
Spätestens, wenn man über drei Bildschirmseiten scrollen muss, ist es an der Zeit, sich damit mal zu beschäftigen.

Wer soll denn in diesem Textklotz nach einem Fehler suchen?

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

01.01.2007, 20:04 Uhr

Ralf27
Posts: 2779
Nutzer
Zitat:
Original von Holger:
@Ralf27:
Schon mal was von Unterprogrammen gehört?
Spätestens, wenn man über drei Bildschirmseiten scrollen muss, ist es an der Zeit, sich damit mal zu beschäftigen.

Wer soll denn in diesem Textklotz nach einem Fehler suchen?

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.


Hast ja recht, die Aufrufe zum GadGetsgenerieren mach ich später via Unterroutinen. Dann sieht es AmiBlitzbasicartiger aus. :)
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]

03.01.2007, 18:05 Uhr

Ralf27
Posts: 2779
Nutzer
Hab denn Fehler gefunden:

VInfo& war das Problem. Ich sollte diese am Schluss des Programms auf 0 setzen, dann ich im laufenden Hauptprogramm beim neugenerieren des Menus auch die VisualInfo benötige und wenn diese ungleich null ist, dann wird diese freigegeben. Das kann natürlich bei einem freigegebenen VisualInfo probleme geben. :)

Ich hoffe das es das war, muß das ganze mal länger laufen lassen und mal nachsehn was passiert. Ok, ist nicht gerade die beste Variante um Fehler zu gezielt zu entfernen, aber hier scheint es wohl nicht anderst zu funktionieren.

Danke für die Hilfe und sorry das der Fehler doch woanderst war.

PS: wenn der Fehler weg ist, dann mach ich die Generierung der Gadgets über Unterroutinen (SUBs). Denn im gleichen zug könnte ich auch dann die Optionen in einem Optionsfenster unterbringen. Aber mal sehn was die Zukunft bringt.
--
http://www.alternativercomputerclub.de.vu

[ - Antworten - Zitieren - Direktlink - ]


1 -2- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > GadGets [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.