2008-09-18 13 views
9

हमें वीबी 6 एप्लिकेशन में एक त्रुटि मिल रही है जो टीसीपी सॉकेट पर डेटा भेजती है। हमें "स्ट्रिंग स्पेस से बाहर" रनटाइम त्रुटि मिलती है। क्या किसी ने इसे देखा है या ऐसा कोई विचार नहीं है कि ऐसा क्यों होगा? ऐसा लगता है कि हम कुछ वीबी 6 थ्रेशोल्ड मार रहे हैं, इसलिए कोई भी अन्य विचार सहायक भी होगा।विजुअल बेसिक में स्ट्रिंग स्पेस से बाहर 6

thks, एके

+0

क्या आप उस त्रुटि के आसपास कोड को पेस्ट कर सकते हैं जो त्रुटि लौटाता है? – Robit

+0

शामिल चर के घोषणा भी उपयोगी हो सकती हैं – Robit

उत्तर

10

के रूप में अन्य लोगों ने बताया है, वीबी में हर स्ट्रिंग संयोजन एक नया स्ट्रिंग आवंटित और फिर डेटा पर और उसके बाद की प्रतिलिपि बनाएगा डी-आवंटन यह कर सकते हैं एक बार मूल। एक लूप में यह मुद्दों का कारण बन सकता है।

इस हल करने के लिए आप इस तरह एक साधारण StringBuilder वर्ग बना सकते हैं:

Option Explicit 

Private data As String 
Private allocLen As Long 
Private currentPos As Long 

Public Function Text() As String 
    Text = Left(data, currentPos) 
End Function 

Public Function Length() As Long 
    Length = currentPos 
End Function 

Public Sub Add(s As String) 

    Dim newLen As Long 
    newLen = Len(s) 
    If ((currentPos + newLen) > allocLen) Then 
    data = data & Space((currentPos + newLen)) 
    allocLen = Len(data) 
    End If 

    Mid(data, currentPos + 1, newLen) = s 
    currentPos = currentPos + newLen 

End Sub 

Private Sub Class_Initialize() 
    data = Space(10240) 
    allocLen = Len(data) 
    currentPos = 1 
End Sub 

इस वर्ग स्ट्रिंग उस में रिक्तियों के साथ बनाया जा करने के लिए मजबूर है और फिर ओवरराइट करके स्ट्रिंग आवंटन की संख्या को कम कर देंगे आवश्यकतानुसार रिक्त स्थान। यह अपने आकार को मोटे तौर पर दोगुना करने के लिए फिर से आवंटित करता है जब यह पाया जाता है कि इसमें पर्याप्त स्थान पूर्व-प्रारंभिक नहीं है। पाठ विधि वास्तव में उपयोग की जाने वाली स्ट्रिंग के हिस्से को वापस कर देगी।

+3

आपको उपलब्ध कार्यों के $ संस्करणों का उपयोग करना चाहिए। अन्यथा महान स्ट्रिंगबिल्डर वर्ग :) – rpetrich

+0

यह स्ट्रिंग बिल्डर बहुत तेज है और "स्ट्रिंग स्पेस से बाहर" त्रुटियों से बच सकता है: http://www.vbaccelerator.com/home/VB/Code/Techniques/StringBuilder/article.asp – MarkJ

2

पाठ MSDN पर पाया: एप्लीकेशन स्ट्रिंग अंतरिक्ष के संदर्भ आउट के लिए

http://msdn.microsoft.com/en-us/library/aa264524(VS.60).aspx

विजुअल बेसिक (त्रुटि 14)

सुनिश्चित वर्णन

विजुअल बेसिक आपको बहुत बड़े तारों का उपयोग करने की अनुमति देता है। हालांकि, अन्य प्रोग्राम्स की आवश्यकताओं और जिस तरह से आप अपने तारों में हेरफेर कर सकते हैं इस त्रुटि का कारण बन सकता है।

  • भाव की आवश्यकता होती है कि अस्थायी तार मूल्यांकन के लिए बनाए जा इस त्रुटि का कारण हो सकता है: यह त्रुटि निम्नलिखित कारणों और समाधानों है। उदाहरण के लिए, निम्न कोड कुछ ऑपरेटिंग सिस्टम पर एक स्ट्रिंग अंतरिक्ष होने की त्रुटि का कारण बनता है:
MyString = "Hello" 
For Count = 1 To 100 
MyString = MyString & MyString 
Next Count 
Assign the string to a variable of another name. 
* Your system may have run out of memory, which prevented a string from 

आवंटित किया जा रहा।

मेमोरी से और स्थान बनाने के लिए स्मृति से किसी भी अनावश्यक अनुप्रयोगों को हटाएं।

अतिरिक्त जानकारी के लिए, प्रश्न में आइटम का चयन करें और F1 दबाएं।

0

मान लें कि आप एक लूप में डेटा जोड़ रहे हैं, सुनिश्चित करें कि यह स्वयं को शामिल नहीं किया जा रहा है, जो स्मृति को बहुत तेज़ी से खाएगा।

उदाहरण और त्रुटि अर्थ का विवरण: http://msdn.microsoft.com/en-us/library/aa264524.aspx

0

ऐसा लगता है जैसे आप अक्सर एक स्ट्रिंग जोड़ रहे हैं। आप StringBuilder class

भी उपयोग कर सकते हैं, इसके अलावा, यह आपके पास कुछ पुरानी वस्तुएं हो सकती हैं जिनमें चारों ओर लटकने वाले तार होते हैं जिनका उपयोग नहीं किया जा रहा है और उन्हें मुक्त किया जाना चाहिए। शायद Class_Initialize/Class_Finalize

2

जैको की प्रतिक्रिया को जोड़ना में वस्तु आवंटन/मुक्त कर देते प्रवेश करके वृत्तीय संदर्भ के लिए जाँच करें, vbAccelerator एक महान स्ट्रिंग बिल्डर वर्ग इतना ही बात सिद्ध लेकिन एक छोटे से अधिक मजबूत है। लेखक यह बताते हुए समाधान के माध्यम से चलता है कि यह कैसे काम करता है।

0

200 9 के वसंत में कभी-कभी, माइक्रोसॉफ्ट ने एक एक्सपी अपडेट किया जो आर्मडिलो/सिलिकॉन रियम्स रैपर में हस्तक्षेप करता था। त्रुटि 14 फेंकने वाले कोड की रेखा, स्ट्रिंग स्पेस से बाहर तार्किक नहीं था। एक बड़े आकार की स्ट्रिंग के साथ कोई समस्या नहीं थी। यह एक साधारण असाइनमेंट था कि मैं "फू" भी बदल गया और त्रुटि 14 अभी भी हुई। मुझे लगता है कि XP ​​में त्रुटि गलत तरीके से मैप की गई है। हमारे लिए उत्तर Armadillo संरक्षण प्रोजेक्ट से copyMem-11 को निकालना था और exe rewrap था।

संबंधित मुद्दे