Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > AutoIt
You last visited: Today at 02:58

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Recursion level has been exceeded - AutoIt will quit to prevent stack overflow.

Discussion on Recursion level has been exceeded - AutoIt will quit to prevent stack overflow. within the AutoIt forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Dec 2012
Posts: 87
Received Thanks: 31
Recursion level has been exceeded - AutoIt will quit to prevent stack overflow.

Hallo Leute,

ich hab das folgende Problem mit meinem Bot:

Nach ca. 4-5 Std. Laufzeit meines Bots bekomme ich folgende Meldung...

"Recursion level has been exceeded - AutoIt will quit to prevent stack overflow."

Das ganze an völlig unterschiedlichen Stellen, es ist also wirklich die Addition die das Problem hervorruft und nicht eine bestimmte Funktion etc.

Ich hab bereits viel gelesen, viel gegoogelt und herausgefunden das es mit den Funktionen zutun hat - das diese immer weiter verschachtelt werden. Hier solle man evtl. weniger mit Funktionen, besser mehr mit Schleifen arbeiten.

Meine Funktionen sind wie folgt aufgebaut:

Code:
Func func_1()
   while 1
      if (irgendwas = true) then
         mach_was
         func_2()
         ExitLoop
      EndIf
EndFunc

Func func_2()
   while 1
      if (irgendwas = true) then
         mach_was
         func_3()
         ExitLoop
      EndIf
EndFunc

Func func_3()
   while 1
      if (irgendwas = true) then
         mach_was
         func_1()
         ExitLoop
      EndIf
EndFunc
Es ist also nicht so, das ich in einer Funktion die gleiche Funktion noch mal aufrufe - was ja gerne auch als Grund genannt wird.

Mit Schleifen wüsste ich auch nicht wie ich das lösen soll, da der Alghoritmus nicht fix ist. Es kann sein, das der Bot bzw. das Spiel die Verbindung verliert und ich danach an einer anderen Stelle wieder rauskomme. Würde ich das ganze also in eine Schleife packen und nach und nach abarbeiten wollen, ginge das nicht - ich bräuchte quasi Sprungmarken.

Jemand eine Idee?
iZz0s is offline  
Old 01/19/2013, 14:31   #2
 
butter123's Avatar
 
elite*gold: 95
Join Date: May 2011
Posts: 982
Received Thanks: 189
also das hat damit zu tun, dass wenn du eine funktion "2" in einer funktion "1" aufrufst, autoit erstmal 2 bis zum ende ausführt und dann an der stelle weitermacht, wo es in 1 aufgehört hat. wenn jz in 2 steht ruf 1 auf, aber in 1 wieder steht ruf 2 auf, dann kommt die fkt nie zum ende und es stapelt sich immer weiter auf. wenn dann irgendwann eine funktion zu ende kommt, wird die vorherige beendet, dann die davor, dann die davor... das tut es bei dir aber anscheinend nicht, als wird der "stapel" an funktionen immer höher. ich hoffe ich konnte es ein bisschen erklären. wenns noch nciht klar ist, versuch ich nochmal ein beispiel zu finden^^

zur lösung:
mach doch nur eine funktion, die so aufgebaut ist:
PHP Code:
While 1
    
If bedingung And $True Then
        inhalt der 1. fkt
        
$False
        
$True
    
EndIf
    
    If 
bedingung And $2    True Then
        inhalt der 2. fkt
        
$False
        
$True
    
EndIf
    
    If 
bedingung And $True Then
        inhalt der 3. fkt
        
$False
        
$True
    
EndIf
WEnd 
das ist das einzige was mir grad eingefallen ist, vllt gibs noch was besseres
butter123 is offline  
Old 01/19/2013, 15:48   #3
 
elite*gold: 50
Join Date: Mar 2010
Posts: 1,373
Received Thanks: 521
Im schimmsten Falle sehen deine Funktionsaufrufe etwa so aus. Wie du siehst wiederholst sich das ab einem bestimmten Punkt immer wieder.
Code:
func1 ->
          func2 ->
                    func3 ->
                              func1 ->
                                        func2 ->
                                                  func3 ->
                                                            func1 ->
                                                                      ....
Die vermeintliche Zufälligkeit hinter den Abstürzen wird dadurch verursacht, dass da ewige Durchlaufen dadurch unterbrochen werden kann, dass eine der Bedingungen in func2 oder func3 falsch sind. D.h. wenn alle Bedingungen zu jedem Zeitpunkt wahr sind, wird das Rekursionslimit sehr schnell erreicht, sollten die Bedingungen nur sehr selten wahr sein, kann das Programm relativ lange funktionieren.
Das Rekursionslimit kann in der Dokumentation abgelesen werden und beträgt 5100. Also wird dein Programm sicherheitshalber abstürzen, wenn func1 sich indirekt 5100 aufgerufen hat.
jacky919 is offline  
Old 01/19/2013, 16:10   #4
 
elite*gold: 0
Join Date: Dec 2012
Posts: 87
Received Thanks: 31
Danke vielmals schon.

Verstehe so halbwegs.

Also ist eig. die einzige Lösung, ohne Funktionen auszukommen bzw. es nach butter's Methode zu machen?
iZz0s is offline  
Old 01/20/2013, 04:47   #5
 
lolkop's Avatar
 
elite*gold: 280
Join Date: May 2007
Posts: 2,818
Received Thanks: 3,483
nur weil folgende funktion, beim aufruf keinerlei fehler verursacht, heist es nicht, das es wirklich sinnvoll ist, die funktion so aufzubauen....

Code:
A()
Func A()
    A()
EndFunc
du musst bedenken, das A jedes mal wieder erneut in A aufgerufen wird. letztendlich verfängt man sich in einer endlosen rekursiven schleife, welche natürlich innerhalb kürzester zeit den stack überlastet....
lolkop is offline  
Reply


Similar Threads Similar Threads
WTB 4 Stacks Of Ectos & 1 Stack of Zkeys (10 € per stack)
06/14/2021 - Guild Wars Trading - 1 Replies
Buying a few stacks of ectos for 12€ a stack. Zkeys for 10€ a stack. Post here or PM me. I will only go first IF I have traded with you before. If not, you go first. Thanks. Paying by paypal and verified. We can talk on MSN/Skype.
MALL_BONUS exceeded over 100!!
09/20/2012 - Metin2 Private Server - 4 Replies
SYSERR: Sep 20 21:02:41 :: PointChange: MALL_BONUS exceeded over 100!! point type: 117 name: BladeMaster amount 9900 SYSERR: Sep 20 21:02:41 :: PointChange: MALL_BONUS exceeded over 100!! point type: 117 name: BladeMaster amount 9900 SYSERR: Sep 20 21:02:41 :: PointChange: MALL_BONUS exceeded over 100!! point type: 117 name: BladeMaster amount 9900 SYSERR: Sep 20 21:02:42 :: PointChange: MALL_BONUS exceeded over 100!! point type: 117 name: BladeMaster amount 9900 SYSERR: Sep 20 21:02:42 ::...
Koopa's Discount-Offer:Ectos 13,99€/stack! Lpicks 3,99/stack!
04/04/2012 - Guild Wars Trading - 0 Replies
Hey ;) My special offer until monday or sold-out. Enjoy :) Ectos in stock: 10 Stacks http://gwah.onlinewelten.com/images/Ektoplasmakuge l.png 8 stacks sold 1 Stack = 13,99€
Koopas Special -> Ektos für 15/€ Stack -- Dietriche 4,99€/Stack
04/03/2012 - Guild Wars Trading - 1 Replies
Servus ;) Ich biete euch hier die einmalige Gelegenheit, Ektos und Dietriche zu einem sehr günstigen Preis zu kaufen. Ektos auf Lager: 15 Stacks http://gwah.onlinewelten.com/images/Ektoplasmakuge l.png 1 Stack = 15,00€
I Quit this Forum And I Quit My Server. [Flaming on emme and tao ;)]
10/19/2008 - CO2 Private Server - 36 Replies
Hey bitches (emme, tao) wtf did you guys wanted? that i quited this forum? you guys are destroying this forum! the only thing that you guys can do is flaming on all server that are new! but where are the servers from you guys? i dont see a server that is made by emme or tao. the only thing that i wanted is a server, that was the only fucking thing that i wanted!:mad::D btw a forum is to help ppl and to talk about games i think, when did you guys helped people or talked nice about games...



All times are GMT +1. The time now is 02:58.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.