Runtime error - Overflow .... PB Memoire ???? [VB] - VB/VBA/VBS - Programmation
Marsh Posté le 30-09-2002 à 23:16:12
kicest a écrit a écrit : Bonjour, j ai fait un programme en VB, et j ai un msg d erreur (runtime error 5 - overflow). J ai l impression que j ai un pb de memoire .... J ai effectivement une grande quantite de tableau assez grand. 1 - Comment agrandir, si c est le pb, la taille memoire allouée pour mon programme. 2- si je fait redim toto() , est-ce que mon tableau est remis à null ? 4- est-ce que l instruction redim preserve toto(x to y, a to b) ou 0 > X < 4000 , pour chaque X, pose des PB en terme de memoire ? 3- comment "flusher" les tableaux en memoire lorsque je le désire ? Je me trompe surement, merci de vos reponses. |
il me semble que les erreurs de type overflow, c'est plutot le dépassement de capacité d'un type de donnée (par exemple donner une valeure supérieure à 65000 à un integer), regarde plutoto de ce coté à mon avis.
1. le programme s'ocrtroie la mémoire qui lui est nécessaire tout seul comme un grand (avec l'aide de windows quand même) jusqu'a ce qu'il n'y en ai plus de disponible. A ce moment tu auras un message d'erreur de windows (et non de VB) qui te diras que tu manques de mémoire virtuelle.
2. si tu fais un "redim toto(x)" toutes les données de ton tableau seront perdues, pour ne pas écraser tes données, il faut que tu fasses "redim preserve toto(x)".
3.qu'est-ce que tu veux dire par "flusher" ? je comprends pas trop
Marsh Posté le 30-09-2002 à 23:26:54
mareek a écrit a écrit : il me semble que les erreurs de type overflow, c'est plutot le dépassement de capacité d'un type de donnée (par exemple donner une valeure supérieure à 65000 à un integer), regarde plutoto de ce coté à mon avis. 1. le programme s'ocrtroie la mémoire qui lui est nécessaire tout seul comme un grand (avec l'aide de windows quand même) jusqu'a ce qu'il n'y en ai plus de disponible. A ce moment tu auras un message d'erreur de windows (et non de VB) qui te diras que tu manques de mémoire virtuelle. 2. si tu fais un "redim toto(x)" toutes les données de ton tableau seront perdues, pour ne pas écraser tes données, il faut que tu fasses "redim preserve toto(x)". 3.qu'est-ce que tu veux dire par "flusher" ? je comprends pas trop |
j ai cette erreur des que je rajoute un array.
Sans ce rajout, le prog tourne tres bien .... C est pour cela que je pensais à un depassement de capacite.
Pour la fonction redim, en fait je declare mes tableaux (general), afin de pouvoir les utiliser de fonction en fonction
mais ils sont généralement temporaires, et je voulais juste savoir si le fait d avoir un tableau par exemple (0 to 4500, 0 to 70) et de faire redim tableau cela le vidait (Dans la mémoire, ou si sa place occupée, est laissée tel quelle et utilisable par un autre tableau ...) mais j etais partit dans une idée de pb memoire ...... je connais et use à outrance de redim preserve .....
Par le terme flusher, je voulais dire Effacer de la memoire, l existence de ce tableau en terme d'espace ....
J espere que c est assez clair, moi meme en relisant c est limite ......
Peut-on deleter un tableau ? (l inverse de dim finalement (rem peut etre ....)
Marsh Posté le 30-09-2002 à 23:46:15
Si ça vient d'un ajout, faudrait essayer de cerner pas à pas ce qui se passe.
On peut avoir overflow aussi si on divise n par zéro, ou log(<=0).
Si on dépasse un indice de dimension, il me semble que le message est différent.
Allouer des tableaux dynamiquement, c'est une très bonne idée car on n'occupe que la mémoire dont on a besoin, ça évite les surdimensionnements au cas où.
Redim permet d'effacer les données (et normalement de libérer la mémoire qui servait si on a un volume moindre). Dans le pire des cas, pour libérer l'espace, on peut faire un redim (1).
La fonction ERASE permet de détruire un tableau dynamique (sous QB du moins) => libérer RAM.
La libération de mémoire, c'est le compilo et Windows qui s'en occupent quand on utilise les bonnes instructions. Si on erase un tableau, on espère que la RAM deviendra disponible .
Sinon, je ne suis pas sur que l'on peut avoir plus de 65000 cases dans un tableau (à vérifier, souvenir QB DOS). Si on a dim Tab(1 to 65, 1 to 10, 1 to 200), ça fait 130000 "cases" : overflow possible car le pointeur risque de sortir de son lit...
Marsh Posté le 01-10-2002 à 00:09:47
kicest a écrit a écrit : j ai cette erreur des que je rajoute un array. Sans ce rajout, le prog tourne tres bien .... C est pour cela que je pensais à un depassement de capacite. Pour la fonction redim, en fait je declare mes tableaux (general), afin de pouvoir les utiliser de fonction en fonction mais ils sont généralement temporaires, et je voulais juste savoir si le fait d avoir un tableau par exemple (0 to 4500, 0 to 70) et de faire redim tableau cela le vidait (Dans la mémoire, ou si sa place occupée, est laissée tel quelle et utilisable par un autre tableau ...) mais j etais partit dans une idée de pb memoire ...... je connais et use à outrance de redim preserve ..... Par le terme flusher, je voulais dire Effacer de la memoire, l existence de ce tableau en terme d'espace .... J espere que c est assez clair, moi meme en relisant c est limite ...... Peut-on deleter un tableau ? (l inverse de dim finalement (rem peut etre ....) |
combien tu utilises de tableaux ? quelle est leur taille maximum? ça métonnerait vraiment que ça soit une question de mémoire, peut-être que tu utilise trop de variables ou des tableaux avec trop d'éléments (les index sont peut-être des integer donc limité à 65000 et des bricoles).
Si t'as toujours des pb avec les tableaux, essaye d'utiliser des collections, c'est plus souple (et un peu plus lourd) et ya pas de pb avec la mémoire.
Marsh Posté le 30-09-2002 à 22:07:32
Bonjour,
j ai fait un programme en VB, et j ai un msg d erreur (runtime error 5 - overflow).
J ai l impression que j ai un pb de memoire ....
J ai effectivement une grande quantite de tableau assez grand.
1 - Comment agrandir, si c est le pb, la taille memoire allouée pour mon programme.
2- si je fait redim toto() , est-ce que mon tableau est remis à null ?
4- est-ce que l instruction redim preserve toto(x to y, a to b)
ou 0 > X < 4000 , pour chaque X, pose des PB en terme de memoire ?
3- comment "flusher" les tableaux en memoire lorsque je le désire ?
Je me trompe surement, merci de vos reponses.
Message édité par kicest le 30-09-2002 à 22:29:19