Hors de l'Espace de Chaîne en Visual Basic 6
Nous obtenons une erreur dans une application VB6 qui envoie les données en arrière sur des sockets TCP. Nous obtenons une erreur d'exécution "de la chaîne de l'espace". Quelqu'un a vu cette ou avez des idées sur le pourquoi de ce qui se passerait? Il semble que nous frapper certains VB6 seuil de sorte que toute les autres pensées seraient utiles.
thks,
ak
Pourriez-vous collez le code autour de la ligne de retour de l'erreur ?
Les Déclarations de variables pourrait être utile aussi
Les Déclarations de variables pourrait être utile aussi
OriginalL'auteur leora | 2008-09-18
Vous devez vous connecter pour publier un commentaire.
Comme d'autres l'ont souligné, chaque concaténation de chaîne en VB va allouer une nouvelle chaîne, puis de copier les données sur et puis de répartir l'original une fois qu'il peut. Dans une boucle, ce qui peut causer des problèmes.
Pour contourner cela, vous pouvez créer une simple classe StringBuilder comme celui-ci:
Cette classe permet de réduire le nombre d'allocations de chaîne en obligeant la chaîne à être construit avec des espaces, puis écraser les espaces nécessaires. Il ré-alloue à peu près le double de sa taille quand il constate qu'il ne dispose pas de suffisamment d'espace pré-initialisé. La méthode de Texte sera le retour de la partie de la chaîne qui est réellement utilisé.
Ce générateur de chaîne est beaucoup plus rapide et pourrait éviter de "sortir de l'espace de chaîne" d'erreurs: vbaccelerator.com/home/VB/Code/Techniques/StringBuilder/...
OriginalL'auteur Jack Bolding
Texte trouvé sur MSDN:
http://msdn.microsoft.com/en-us/library/aa264524(SV.60).aspx
OriginalL'auteur Robit
L'ajout de Jacco réponse, vbAccelerator a une grande Chaîne Constructeur de la classe qui accomplit la même chose, mais est un peu plus robuste. L'auteur a également des promenades à travers la solution en expliquant comment elle fonctionne.
OriginalL'auteur Rylee Corradini
En supposant que vous êtes ajout de données dans une boucle, de s'assurer qu'il n'est pas ajouté à lui-même, qui va manger de la mémoire extrêmement rapidement.
Exemple et la description de l'erreur de sens:
http://msdn.microsoft.com/en-us/library/aa264524.aspx
OriginalL'auteur
Dans le courant du printemps 2009, Microsoft a fait une mise à jour de XP qui interfère avec Tatou/Silicium Royaumes wrapper.
La ligne de code qui jetait erreur 14, Hors de l'espace de Chaîne n'est pas logique. Il n'y a pas de problème sur la taille de la chaîne. C'était une simple affectation que j'ai même changé à "foo" et l'erreur 14 encore eu lieu. Je pense que l'erreur est mappé correctement dans XP.
La réponse pour nous était de supprimer copyMem-11 du Tatou projet de protection et de refaire le le exe.
OriginalL'auteur
On dirait que vous vous êtes ajoutant une chaîne souvent. Vous pouvez essayer d'utiliser un Classe StringBuilder
Aussi, il pourrait être que vous avez quelques vicié des objets qui contiennent des chaînes de traîner qui ne sont pas utilisés, et doivent être libérées. Vérifiez les références circulaires, peut-être en vous connectant allocation des objets/libère dans
Class_Initialize/Class_Finalize
OriginalL'auteur rpetrich