Structure + Prototype + Procedure + Tab() = Stack OverFlow

Archive.
Mytic
Messages : 466
Inscription : mer. 25/juil./2007 0:13

Structure + Prototype + Procedure + Tab() = Stack OverFlow

Message par Mytic »

Bonjour,
Je suis tombé sur un autre bug embêtant !
En fessant appel à des fonctions via des prototypes, au bout d’un certain temps j’ai ce message : Stack OverFlow

On ré-exécutant le programme tout en vérifiant l’utilisation mémoire, je remarque qu’elle augmente constamment à chaque appel via une variable prototype.

J’enlève la partie des prototypes, et je la teste toute seule dans un code fait pour.
Et rien, aucun bug, tout est normal !
Mais quand je l’implémente dans un autre programme, le bug réapparaît.
Comme si il y’avait une fuite de mémoire quelque part dans les fonctions de PureBasic.

Mais voici à quoi ressemble le bug : (laissez tourner pendant un moment, et vous verrez la fameuse erreur)

Code : Tout sélectionner

Prototype proto(L.l)

Structure struct
  L.proto
EndStructure

Global plec.l
Global Dim Call.struct(99)
Global Dim Bcode.l(999)
Bcode(0) = 3
Procedure fonction(L.l)
   L=L+L
Call(Bcode(0))\L(1)  ; == pour accélérer l'affichage de l'erreur
EndProcedure
Procedure surcharge(L.l)
   L=L+L
EndProcedure

Call(0)\L = @fonction()
Call(1)\L = @surcharge()
Call(2)\L = @fonction()
Call(3)\L = @fonction()
Procedure execut()
v = 3
fonction(23)
Repeat
fonction(444)
If e <> 12313
 surcharge(Random(40))
   surcharge(Random(40))
 surcharge(Random(40))
           Call(Bcode(0))\L(1)
   plec = plec + 1
EndIf
Until plec > 1000000000000

EndProcedure

execut()
Au fait, ça ne vient pas de la Récursivité, car dans l’autre code y’en a pas ! Je l’ai utilisé que pour accélérer le processus. je n'arrive pas à trouver la cause ( ici dans cet exemple c'est sûr que c'est la récursivité , mais dans l'autre :? ??? )

Alors vous en pensez quoi ?:!:

Je sais que pour le moment le problème reste toujours obscur, mais je n’arrive pas à le localiser pour donner un exemple ciblé.

Merci.