Toon posts:

[VB6] out of stack space, runtime error '28' *

Pagina: 1
Acties:
  • 686 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Beste tweakers,

Ik ben een programma aan het maken voor mijn eindwerk, die het aantal bouten berekent van een serre. Die bevat nu 171 pagina's aan code.
Alles verliep vrij vlot, maar na het invullen van nog meer formules geeft hij volgende fout: out of stack space, runtime error '28' in VB6

Kan iemand mij verklaren, wat dat wil betekenen

Groeten

  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
out of stack betekend in vbscript meestal dat er iets fout gaat met een array of een functie...

Post anders eens wat van je code zodat we kunnen zien wat er fout gaat.

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 21-05 14:59

pjvandesande

GC.Collect(head);

Wat doe je precies in het script en waar loop hij op zet gat? Heb je ander wat code, zoals faabman al zei?

Verwijderd

Topicstarter
Hij markeert volgende in het geel, maar dit heeft altijd gewerkt

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Option Explicit
Public cat(0 To 10) As Single

Sub berekenen()
Call NeZe_deeltjes.berekenen
cat(1) = (NeZe_deeltjes.cat(150) / 4) + (NeZe_deeltjes.cat(160) / 2) - NeZe_deeltjes.cat(60) - NeZe_deeltjes.cat(70) - NeZe_deeltjes.cat(80)
Call TwTa_deeltjes.berekenen
cat(2) = (TwTa_deeltjes.cat(150) / 4) + (TwTa_deeltjes.cat(160) / 2) - TwTa_deeltjes.cat(60) - TwTa_deeltjes.cat(70) - TwTa_deeltjes.cat(80)
Call ViTi_deeltjes.berekenen
cat(3) = (ViTi_deeltjes.cat(150) / 4) + (ViTi_deeltjes.cat(160) / 2) - ViTi_deeltjes.cat(60) - ViTi_deeltjes.cat(70) - ViTi_deeltjes.cat(80)
Call ZeTi_deeltjes.berekenen
cat(4) = (ViTi_deeltjes.cat(150) / 4) + (ViTi_deeltjes.cat(160) / 2) - ViTi_deeltjes.cat(60) - ViTi_deeltjes.cat(70) - ViTi_deeltjes.cat(80)
Call NeTiTw_deeltjes.berekenen
cat(5) = (ViTi_deeltjes.cat(150) / 4) + (ViTi_deeltjes.cat(160) / 2) - ViTi_deeltjes.cat(60) - ViTi_deeltjes.cat(70) - ViTi_deeltjes.cat(80)
Call TwTwVe_deeltjes.berekenen
cat(6) = (ViTi_deeltjes.cat(150) / 4) + (ViTi_deeltjes.cat(160) / 2) - ViTi_deeltjes.cat(60) - ViTi_deeltjes.cat(70) - ViTi_deeltjes.cat(80)
End Sub


Dit zijn formules die in een module wordt uitgewerkt. De waarden worden gehaald bij andere modules. hij zet Call NeZe_deeltjes.berekenen, dus eerste zin in het geel. maar volgens mij scheelt het daar niet aan, denk ik. Hij moet een 1500 formules overlopen voor hij resulaten kan geven.

[ Voor 3% gewijzigd door Verwijderd op 18-05-2004 23:15 ]


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
volgens mij zit het probleem hem in de public cat()... deze moet worden gedeclareerd binnen je procedure...

edit:
icm de recursieve aanroep dan hè :o

[ Voor 20% gewijzigd door faabman op 18-05-2004 23:27 ]

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • jvo
  • Registratie: Augustus 2001
  • Laatst online: 04-10-2023

jvo

geen commentaar

faabman schreef op 18 mei 2004 @ 23:05:
out of stack betekend in vbscript meestal dat er iets fout gaat met een array of een functie...

Post anders eens wat van je code zodat we kunnen zien wat er fout gaat.
Klinkt bij mij als een verkeerde (lees: oneindige) recursieve aanroep.
offtopic:
Ik heb de code eerlijk gezegd niet bekeken.

[ Voor 9% gewijzigd door jvo op 18-05-2004 23:21 ]


Verwijderd

Topicstarter
faabman schreef op 18 mei 2004 @ 23:17:
volgens mij zit het probleem hem in de public cat()... deze moet worden gedeclareerd binnen je procedure...
Wat wil je dan bedoelen met gedeclareerd worden binnen uw procedure? Kun je iets meer uitleg geven, ben nog tamelijk traag van begrip ;-)
Anders gaf hij nooit een fout. Nu enkel door nog formules bij te voegen.

  • Exterazzo
  • Registratie: Mei 2000
  • Laatst online: 11:41

Exterazzo

Qeasy

Heb je geen recursieve aanroepen? Dwz dat een procedure zichzelf aanroept, enz. Dan plaatst ie namelijk elke keer data op de stack, en als je dat blijft doen, zit de stack gewoon vol :)

Audentia


Verwijderd

Topicstarter
Exterazzo schreef op 18 mei 2004 @ 23:25:
Heb je geen recursieve aanroepen? Dwz dat een procedure zichzelf aanroept, enz. Dan plaatst ie namelijk elke keer data op de stack, en als je dat blijft doen, zit de stack gewoon vol :)
Moet je dan tussenberekeningen, iedere keer apart laten opslaan? Dus ik moet een ander manier gebruik dan
Public cat(0 to100) as single

Of moet er gebruik gemaakt worden van:

Private cat(0 to 100) As single?? ==> nuja die public heb ik nodig om verbinding te maken met mijn verschillende modules

[ Voor 17% gewijzigd door Verwijderd op 18-05-2004 23:38 ]


Verwijderd

Topicstarter
Zou het kunnen zijn dat het ligt aan het aantal berekeningen die hij moet onthouden. Dus het aantal variabelen een 2000 tal??
Of ligt het daar niet aan?

Verwijderd

Verwijderd schreef op 18 mei 2004 @ 22:57:
Ik ben een programma aan het maken voor mijn eindwerk, die het aantal bouten berekent van een serre. Die bevat nu 171 pagina's aan code.
Alles verliep vrij vlot, maar na het invullen van nog meer formules geeft hij volgende fout: out of stack space, runtime error '28' in VB6

Kan iemand mij verklaren, wat dat wil betekenen
Verklaring: Je stack space is te klein voor deze bewerking.

Oplossing:
1. Vergroot je stack space.
2. Maak je algoritme minder complex

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Topictitel prefixed, zie stickies in Programming & Webscripting :)

Professionele website nodig?


Verwijderd

Topicstarter
Verwijderd schreef op 19 mei 2004 @ 00:21:
[...]

Verklaring: Je stack space is te klein voor deze bewerking.

Oplossing:
1. Vergroot je stack space.
2. Maak je algoritme minder complex
Hoe kun je dan uw stack space vergroten?? Ik heb al overal gezocht op internet naar oplossingen, maar niets gevonden.
Weet iemand hoe je uw stack space kan vergroten in VB6

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 18 mei 2004 @ 23:13:
code:
1
2
3
4
Sub berekenen()
    Call NeZe_deeltjes.berekenen
    ...
End Sub
Dat is leuk. Als je berekenen aanroept, dan is het eerste wat gedaan wordt het aanroepen van berkenen. Maar die roept op zijn beurt ook weer berekenen aan, en die ook weer, en die ook weer, en dat gaat zo oneindig door. Je hebt uiteraard wel een stopconditie nodig om de recursie te beëindigen.

Tip: leer debuggen, dan was je hier al snel genoeg achter

.edit: oh wacht, ik kijk denk ik iets verkeerd. Hoe ziet een NeZe_deeltje eruit? En zijn berekenen functie?

[ Voor 17% gewijzigd door .oisyn op 19-05-2004 22:54 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Ja, klopt wat jullie zeggen. Zat blijkbaar met teveel procedures. De ene procedure moest een andere procedure starten, enz... Nu heb ik de Call Modelu1.berekenen beter op zijn plaats geplaatst, zodat hij niet van boven staat en zodat hij niet alles moet berekenen in de andere modules en dan in deze modelus ook de andere berekenen enz..
Wanneer je de Call ...berekenen beter plaatst in de module waar hij hoort, zal hij minder snel in de knoop slaan. Ook had ik overdreven met de
Public cat(0 To 1000) As Single en heb ik een specifieker getal gekozen vb:
Public cat(0 To 850) As Single.

Bedankt voor jullie raad, ik laat jullie wel nog weten hoeveel ik kreeg voor mijn eindwerk ;-)
Pagina: 1