PDA

Visualizza la versione completa : [AUTO-IT] Stack Overflow nell'esecuzione di script


Riders
30-04-2012, 19:53
Salve a tutti..
Premetto che non ne capisco molto di programmazione...ma nonostante questo provado e provando sono riuscito a compilare un programma tramite AUTOIT v3 che mi serve per un gioco...
Devo dire che funziona ottimamente..l'unico problema e che dopo un paio di ore di funzionamento mi da l'errore si Stack Overflow..
So che riguarda la memoria ma non so proprio come risolvere il problema...
C' qualcuno che mi puo dare qualche delucidazione in merito?
Il codice di circa 900 linee...postarlo qui sarebbe difficile...
Grazie...

alka
30-04-2012, 20:06
Originariamente inviato da Riders
Devo dire che funziona ottimamente..l'unico problema e che dopo un paio di ore di funzionamento mi da l'errore si Stack Overflow..
So che riguarda la memoria ma non so proprio come risolvere il problema...
C' qualcuno che mi puo dare qualche delucidazione in merito?


Come si pu darti un aiuto senza sapere nulla del codice che hai scritto?

E poi, che versione di VB sarebbe? (non l'hai indicata nel titolo)

Verifica qual il punto in cui viene segnalato l'errore, e qual l'operazione che viene svolta in quel contesto, cos da poter focalizzare l'attenzione su un pezzo particolare di codice che molto probabilmente quello che genera il difetto.

Cos come posta, la domanda inaffrontabile.

Riders
30-04-2012, 20:15
AutoIt v3 is a freeware BASIC-like scripting language designed for automating the Windows GUI and general scripting...
Il programma che sto usando free e sinceramente non so che versione di Basic ..

Per quando riguarda l'errore di Stack purtoppo ogni volta che me lo da segnala una riga differente...non mi da l'errore sempre alla stessa linea...dopo circa 2 ore di funzionamento...

Il codice potrei mandartelo in qualche modo per fartelo visionare...

Come ho detto una produzione propria di chi non ha fatto programmazione logicamente con tutti gli errori che ne derivano....

oregon
30-04-2012, 20:20
Quindi non utilizzi VB ma AutoIt ...

Probabilmente chiami qualche parte del programma ricorsivamente, senza controllare la fine della ricorsione.

Scara95
30-04-2012, 20:24
E possibile che non sia colpa tua ma della gestione automatica della memoria di auto-it, comunque se vuoi maggiore aiuto dovresti postare il codice.

P.s. Usi file? Quando li apri poi li chiudi? Ci sono chiamate ricorsive?

Riders
30-04-2012, 20:32
Visto che il codice si visualizza solo con il programma installato non vi chiedo di installare il programma ma a limite di dargli un occhiata in txt

http://www.qfpost.com/file/d?g=6JPYYMukx

questo il link del download

molto intrecciato data la mia ignoranza nel settore...quindi non chiedo di aggiustarlo ma solo di vedere propro l'errore tecnico dov'...

Riders
30-04-2012, 20:39
So che non faciele da capire proprio perch secondo me non rispecchia proprio niente della programmazione...
Purtoppo sono appassionato di informatica ma di programmazione non so niente...e a fare un programma che faccia tutto da solo alla fine l'ho fatto e mi funziona bene...se non fosse per questo problema...
Anche io avevo pensato che poteva essere un problema di limite del programma...infatti l'errore che mi da " che lo script stato terminato per PREVENIRE un PROBABILE problema di
Stack "...quindi non neanche detto che il problema sia nel codice...

rsdpzed
30-04-2012, 20:49
attacco_sx chiama maresinistra che potrebbe chiamare attacco_sx...
solo un esempio (non lo legger tutto ne posso mettemri a verificare le condizioni che lo regolano) ma il classico modo per finire in stackoverflow.

Una funzione quando chiama un altra come se si mettesse un mattone sopra un altro mattone. Quando una funzione termina viene tolto un mattone e non puoi avere piu di un certo numero di mattoni impilati. Se A chiama B che chiama A crei un ciclo di chiamate infinito che termina appunto con uno stackoverflow: troppi mattoni :)

Riders
30-04-2012, 23:04
ok..grazie mille.. non so come risolvere...forse con un altro mese di tentativi qualcosa succeder :dh: :D

rsdpzed
01-05-2012, 08:36
tieni conto che tutte quelle chiamate sono inserite in un ciclo infinito (while 0=0) che si ripete in continuazione. Quande sei in maredestra, maresinistra ecc, non c' bisogno che ti ricavi nuovamente gli input con i vari pixelsearch perche lo farai al prossimo giro nella function inizio.

in un videogame generalmente il ciclo infinito fatto logicamente cosi:



while (0=0) //per sempre
{
i=LeggiInput()
Azione(i) //azione in funzione dell'input letto
//...eventualmente...
ridisegnaSchermo() //sembra che il tuo framework lo faccia da se.
}


tutto in modo "atomico" rispetto al singolo input letto nel singolo giro all'interno del while. poi la palla ritorna al giro successivo.

Nel tuo codice invece sembra (sembra perche non conosco assolutamente il framework per cui posso al massimo intuire) che quando leggi un input e ti comporti di conseguenza poi ritorni a rileggere nuovamente l'input nell'ambito dello stesso ciclo quando invece non dovresti fare nulla se non ridisegnare la mappa e passare la palla al prossimo giro.

Loading