2010-03-22 11 views
8

मैं एक ऐसी स्क्रिप्ट चला रहा हूं जो एक साजिश को एनिमेट करता है (जल प्रवाह का अनुकरण)। थोड़ी देर बाद, मैं ctrl-c करके लूप को मारता हूं। कई बार करने के बाद मैं त्रुटि मिलती है:स्मृति matlab में मुक्त नहीं है?

??? Error: Out of memory. 

और बाद मुझे लगता है कि त्रुटि प्राप्त करना शुरू, मेरी स्क्रिप्ट के लिए हर कॉल यह उत्पन्न होगा।
अब, यह फ़ंक्शन के अंदर किसी भी चीज़ से पहले होता है जिसे मैं कॉल कर रहा हूं, यानी यदि मैं a=1 को उस फ़ंक्शन की पहली पंक्ति के रूप में जोड़ता हूं, जिसे मैं कॉल कर रहा हूं, मुझे अभी भी त्रुटि और कोई प्रिंटआउट नहीं मिला है, इसलिए अंदर कोड समारोह को निष्पादित भी नहीं किया जाता है। इसका कारण क्या हो सकता है?

+1

कृपया कुछ कोड प्रदान करें, और हमें बताएं कि आप किस मैटलैब दुभाषिया (संस्करण सहित) का उपयोग कर रहे हैं। –

उत्तर

8

कई संभावित कारण हैं।

  1. अधिकतर आपकी स्क्रिप्ट मेमोरी भरने वाले कुछ चर बनाता है। स्क्रिप्ट को पुन: प्रारंभ करने से पहले चलाने

    clear all 
    

    , ताकि सभी चर साफ़ हो जाते हैं, या एक समारोह के लिए अपनी स्क्रिप्ट को बदलने (जो स्वचालित रूप से समारोह रिटर्न के बाद सभी अस्थायी चर मिटा देगा)।

  2. शायद आप एक दूसरे पर कई भूखंडों की योजना बनाकर एनिमेट कर रहे हैं (अक्षों को पहले साफ़ किए बिना)। इस प्रकार आप जावा हीप स्पेस से बाहर हो सकते हैं। आप व्यक्तिगत रूप से खुला आंकड़े बंद करें, या चला सकते हैं

    close all 
    

    तुम भी अपने सिस्टम पर जावा मेमोरी मैटलैब की राशि का उपयोग करता है बढ़ा सकते हैं (see instructions here) - ध्यान दें कि सीमा आम तौर पर नहीं बल्कि कम है, annoyingly इसलिए यदि आप करना चाहते हैं आंकड़ों के टन।

  3. विशेष रूप से यदि आप विंडोज के पुराने संस्करण को चला रहे हैं, तो आप अपनी याददाश्त को खंडित कर सकते हैं। Matlab चर आवंटित करने के लिए मुक्त स्थान के संगत ब्लॉक की जरूरत है। मेमोरी विखंडन की जांच के लिए,

    memory 
    

    और अधिकतम संभव चर आकार के लिए संख्या को देखें। यदि यह सभी सरणी के लिए उपलब्ध आकार से बहुत छोटा है, तो यह Matlab को पुनरारंभ करने का समय है (मुझे लगता है कि यदि आप Windows संस्करण का उपयोग करते हैं जिसके लिए समस्या को ठीक करने के लिए रीबूट की आवश्यकता होती है, तो आप Win7 के साथ एक नया कंप्यूटर प्राप्त करना चाहते हैं) ।

+0

धन्यवाद! मेरी समस्या बिल्कुल # 2 – olamundo

+3

+1 थी। 3 मामले के लिए, आपको रीबूट की आवश्यकता नहीं है। विखंडन Matlab प्रक्रिया को आवंटित वर्चुअल मेमोरी स्पेस में होता है; एक स्लेट स्लेट पाने के लिए Matlab को पुनरारंभ करना पर्याप्त है। स्पष्टीकरण के लिए –

+0

धन्यवाद। अगर मैं सही ढंग से याद करता हूं, विंडोज एनटी पर (या यह Win95 था?), तो हमें पूरी तरह रीबूट करना पड़ा। मुझे खुशी है कि इस दुनिया में प्रगति है! – Jonas

2

ऐसा लगता है कि आप अपने किसी भी चर को साफ़ नहीं कर रहे हैं। आपको या तो ctrl-c को मारने के बिना लूप को रोकने का तरीका प्रदान करना चाहिए ("स्टॉप" बटन और अपना डिस्प्ले वाला एक सरल जीयूआई लिखें) और फिर स्क्रिप्ट में अपना वर्कस्पेस साफ़ करें या स्क्रिप्ट की शुरुआत में अपने चर साफ़ करें।

क्या आप जानबूझकर अपने लूप के प्रत्येक पुनरावृत्ति पर सभी डेटा (या कुछ बड़े घटक) को संग्रहीत कर रहे हैं?

3

तुम भी pack आदेश, जैसे की कोशिश कर सकते हैं:

close all; 
clear all; 
pack; 

स्मृति स्पष्ट करने के लिए। हालांकि हाल के गणित सेमिनार के बाद मैंने गुरुत्वाकर्षण गुरु में से एक से पूछा और उन्होंने स्मृति विखंडन के बारे में @ एंड्रयू जंक की टिप्पणी को भी अनुरूप बनाया। आम तौर पर मैटलैब को छोड़ना और पुनरारंभ करना मेरे लिए (एक्सपी पर) है।

4

clear allclose all सभी गैर-शुरुआती लोगों द्वारा ज्ञात स्मृति मुक्त करने के लिए सीधे आगे के तरीके हैं।

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

यह मैटलैब के साथ वर्तमान में एक बड़ी समस्या है, और मेरे ज्ञान के लिए matlab को पुनरारंभ करने के बजाय कोई समाधान नहीं है, जो दयालु है।

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