DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > GadGets | [ - Search - New posts - Register - Login - ] |
1 -2- | [ - Post reply - ] |
2006-12-31, 23:42 h Ralf27 Posts: 2779 User |
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 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. ] [ - Answer - Quote - Direct link - ] |
2007-01-01, 19:55 h Holger Posts: 8116 User |
@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. [ - Answer - Quote - Direct link - ] |
2007-01-01, 20:04 h Ralf27 Posts: 2779 User |
Zitat: Hast ja recht, die Aufrufe zum GadGetsgenerieren mach ich später via Unterroutinen. Dann sieht es AmiBlitzbasicartiger aus. -- http://www.alternativercomputerclub.de.vu [ - Answer - Quote - Direct link - ] |
2007-01-03, 18:05 h Ralf27 Posts: 2779 User |
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 [ - Answer - Quote - Direct link - ] |
1 -2- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > GadGets | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |