का उपयोग कर रहा डेल्फी कोडमेमोरी मुक्त कैसे जब बाहर का स्मृति अपवाद डेल्फी में होता है SetLength
var
a: array of array of array of integer;
begin
try
SetLength(a, 100000, 100000, 10000); // out of memory here
doStuffs(a);
except
a = nil; // try to free the memory
end;
end;
का एक टुकड़ा ऊपर कोड स्मृति के बहुत सारे आवंटित करने के लिए और out-of-memory
पकड़ा हो जाएगा की कोशिश करता है। a=nil
निष्पादित किया जाएगा, लेकिन स्मृति मुक्त नहीं है।
क्या मेमोरी अपवाद के मामले में स्मृति को मुक्त करने का कोई तरीका है?
मैंने SetLength(a, 0, 0, 0)
और Finalize(a)
की कोशिश की, और दोनों काम नहीं करेंगे।
जब आप अपवाद हैंडलर में हों, तो क्या '' में एक गैर-शून्य मान भी है? यदि नहीं, तो आप शायद ही इसे मुक्त करने में सक्षम होने की उम्मीद कर सकते हैं। इसके अलावा, यह वैसे भी समारोह के अंत में मुक्त हो जाएगा। क्या आपने पुष्टि की है कि 'SetLength'' a' चर सेट करता है जब यह सभी अनुरोधित मेमोरी आवंटित नहीं कर सकता है? –
@Rob No, अपवाद हैंडलर में 'a'' nil' है। –
हां, एक = शून्य जब कोड अपवाद ब्लॉक में कदम उठाता है। पीएस: मैंने फास्टएमएम को मेमोरी मैनेजर के रूप में इस्तेमाल किया। –