Bug, dépassement des capacités... MAIS POURQUOI?!?!?

faiseurdesonges Messages postés 10 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 10 mars 2004 - 17 août 2003 à 15:25
faiseurdesonges Messages postés 10 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 10 mars 2004 - 18 août 2003 à 07:51
voila c juste un robo archiveur sur irc tout semble bien marcher ... lorsqu'il reçoit un 'ping', il renvoit un 'pong', jusque là tout semble normal. Ce pong il le note aussi dans sa fenêtre d'état (text1). Le hic est que au bout de x minutes où il est resté connecté il pète un cable et plante suite à un dit 'dépassement des capacités'... la ligne de code mise en cause est celle ci:

Text1.Text = Text1.Text & vbCrLf & "--------------" & vbCrLf & ">" & chaine

mais je ne comprends pas où il peut y avoir eu un dépassement des capacités.... (text1 étant remis à zeros si il devient trop imposant..)
Vous n'avez pas une idée?

Sinon voici le modul en entier:

Public Sub IRCSend(chaine As String)
'on envoie une chaine au serveur mais on l'affiche aussi !
Winsock1.SendData chaine & vbCrLf
If Len(Text1.Text) > 80000 Then Text1.Text = ""
Text1.Text = Text1.Text & vbCrLf & "--------------" & vbCrLf & ">" & chaine
End Sub

mici d'avance ^^

8 réponses

cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
17 août 2003 à 16:03
8-) Neodante 8-)

En effet une chaine de caractères peut contenir plus de 2 milliards de caractères mais est-tu sure que ce n'est pas le SendData qui fait la grouille ???
@+
0
cs_neodante Messages postés 2835 Date d'inscription lundi 11 août 2003 Statut Modérateur Dernière intervention 16 décembre 2006 11
17 août 2003 à 16:47
8-) Neodante 8-)

D'après la documentation MSDN la fonction Len renvoit un Long mais en fait si tu fais une boucle de 80000 et que tu demandes la taille avec Len, la valeur ne dépasse pas 35565 !!!
Si ça peut t'aider
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
17 août 2003 à 17:54
mail : jeanpierre.rossetto@club-internet.fr
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
17 août 2003 à 17:54
oups désolé !
mail : jeanpierre.rossetto@club-internet.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
faiseurdesonges Messages postés 10 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 10 mars 2004
17 août 2003 à 19:14
mmh oki donc le nettoyage du text1 ne se fera jamais....
mais je comprends quand même pas car j'ai pas dépassé le millard avant que ça bug :P

quand à l ligne qui bug c celle que vb6 me pointe lorsque ça plante dans l'éxecution.... (erreur numéros -9 je crois.... mais vais vérrifier (bref laisser tourner le prog une heure -_- ) )

mici :-)
0
faiseurdesonges Messages postés 10 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 10 mars 2004
17 août 2003 à 19:32
Vala l'erreur exacte c'est:

"run-time error '7':
out of memory"

sur irc évidement il plante puisqu'il ne renvoit plus les ping

et la ligne encause est

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim chaine As String

Winsock1.GetData chaine
If Len(Text1.Text) > 50000 Then Text1.Text = ""

---> Text1.Text = Text1.Text & vbCrLf & "--------------" & vbCrLf & Mid(chaine, 1, Len(chaine) - 2) <----

CheckLine chaine
End Sub
0
Proger Messages postés 248 Date d'inscription vendredi 10 novembre 2000 Statut Membre Dernière intervention 19 décembre 2008
18 août 2003 à 01:20
Probablement car tu reçois bcp trop d'info en provenance du socket, et comme tu utilise l'objet text1 pour cumuler l'ancien résultat, y dois y avoir un problème de pile...
enfin bref, essaye plutôt ce code :

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim chaine As String
Dim TempS As String

Winsock1.GetData chaine

If Len(Text1.Text) > 50000 Then Text1.Text = ""
TempS = Text1.Text & vbCrLf & "--------------" & vbCrLf & Mid(chaine, 1, Len(chaine) - 2)
Text1.Text = TempS
CheckLine chaine
End Sub

c'est bizarre mais j'ai l'impression que ça servira a rien... Si c'est le cas, vire la ligne qui teste si len(text1)>50000 ainsi que text1.text = temps en la remplaçant par
Text1.Text = Right$(Temps, 50000)
0
faiseurdesonges Messages postés 10 Date d'inscription jeudi 27 mars 2003 Statut Membre Dernière intervention 10 mars 2004
18 août 2003 à 07:51
ça n'a pas l'air de changer grand choses.... mais j'ai abaissé la limite à 35565, comme on me l'a fait remarqué plus haut et il n'a pas planté de la nuit c'était peut être ça... :-)
je viens de le démarrer avec ''Text1.Text = Right$(Temps, 50000)'' ça risque fort de marcher aussi :-)
(bête limite à la valeur de 'len')

en tout cas merci les gars ^^
0
Rejoignez-nous