मैं इस बुरा बग है कि अतीत में गायब हो गया है, लेकिन अब काफी कुछ समय के बाद यह वापस आ था।FastMM4 कहते हैं, "ब्लॉक हैडर दूषित हो गया है"
मैं दो TSam वस्तुओं (TPersistent से प्राप्त) बनाया है और एक TAsmJob वस्तु (TObjectList से प्राप्त) में लोड किया है।
रनटाइम पर, एक रूप एक TStringGrid और फिर AsmJob जो उन दो सैम वस्तुओं बनाता है बनाता है (और उनमें से प्रत्येक में डिस्क से कुछ डेटा लोड)। AsmJob भी ग्रिड को सौंपा गया है। जब फॉर्म नष्ट हो जाता है, तो ग्रिड इसे मुक्त करके AsmJob का ख्याल रखता है, जो टीएसएएम वस्तुओं को मुक्त करता है। यहां समस्या है: पहली वस्तु को समस्याएं मुक्त कर दी गई हैं, लेकिन दूसरा व्यक्ति मर जाता है जब उसकी विरासत विधि (विनाशक को नष्ट करने में) कहा जाता है।
मैं वस्तुओं मुक्त करने के लिए पूरे कार्यक्रम में FreeAndNil का उपयोग करें। टीएसएएम ऑब्जेक्ट्स शून्य नहीं हैं !!!!! तो, वस्तुओं को मुक्त करने का यह पहला प्रयास है। यहां तक कि वस्तुओं के अंदर डेटा भी सुसंगत है।
कार्यक्रम की रीढ़ इस तरह दिखता है:
**Create:**
Form -> StringGrid
-> AsmJob -> Sam1, Sam2
StringGrid.AsmJob:= AsmJob;
**Free:**
Form -> StringGrid -> AsmJob -> Sam1, Sam2
मैं सच में समझ में नहीं आता है, जहां मैं इस बात की दोबारा मुक्त करने के लिए या वस्तु के ऊपर लिख के बाद इसे जारी कर दिया गया है की कोशिश करो।
संपादित करें:
त्रुटियों मुझे मिल गया में से कुछ:
FastMM एक मुक्त ब्लॉक आपरेशन स्कैन के दौरान एक त्रुटि का पता लगाया है। फास्टएमएम ने पाया कि एक ब्लॉक मुक्त होने के बाद संशोधित किया गया है।
FastMM एक मुक्त ब्लॉक आपरेशन स्कैन के दौरान एक त्रुटि का पता लगाया है। ब्लॉक हेडर दूषित हो गया है।
विवरण:
The current thread ID is 0x19C, and the stack trace (return addresses) leading to this error is:
402E77 [System][@FreeMem]
4068DC [System][@DynArrayClear]
405E2D [System][@FinalizeArray]
405D31 [System][@FinalizeRecord]
40432F [System][TObject.CleanupInstance]
404272 [System][TObject.FreeInstance]
404641 [System][@ClassDestroy]
4D313E [UnitSam.pas][TSam.Destroy][297]
4042BF [System][TObject.Free]
4149ED [SysUtils][FreeAndNil]
4D9C0A [UnitAsmJob.pas][UnitAsmJob][TAsmJob.Destroy][180]
मैं "रेंज की जांच करें" सहित सभी "डिबग" विकल्प आईडीई में सक्षम है, तो है। इसके अलावा, फास्टएमएम 4 सुपर आक्रामक डीबग मोड पर सेट है। फास्टएमएम के बिना या डीबगर के बाहर प्रोग्राम ठीक चलाता है - लेकिन फिर भी मुझे पता है कि इसका मतलब यह नहीं है कि बग अब और नहीं है। असल में यह एक साल से अधिक के लिए (शायद) काम करता है, जब तक कि मैंने फास्टएमएम स्थापित नहीं किया हो।
संपादित करें:
सभी को धन्यवाद। नहीं, मुझे लगता है कि मैं अच्छी दिशा में थोड़ा आगे बढ़ रहा हूं।
कार्यक्रम की संरचना और अधिक जटिल मैं केवल मूल पोस्ट छोटे रखने के लिए रीढ़ की हड्डी की पेशकश की है। लेकिन बिल्ली क्या है, यह पहले से ही बड़ा हो गया है :) तो, उन टीएसएएम वस्तुओं का उपयोग डिस्क से डेटा लोड करने के लिए किया जाता है। प्रत्येक ऑब्जेक्ट में एक फ़ाइल। वे कुछ प्रसंस्करण और डेटा सत्यापन भी कर रहे हैं। इनमें से प्रत्येक टीएसएएम के लिए मेरे पास एक ग्राफिकल ऑब्जेक्ट भी है जो स्क्रीन पर (ग्राफिक रूप से) टीएसएएम ऑब्जेक्ट्स में मौजूद डेटा दिखाता है। TStringGrid में प्रत्येक पंक्ति भी टीएसएएम में डेटा दिखाती है, लेकिन पाठ रूप से।
मेरे पास एक प्रश्न है: यदि मैं छोटे टुकड़ों में प्रोग्राम को तोड़ने के लिए प्रोग्राम को तोड़ता हूं, तो त्रुटि अभी भी दिखाई देगी? या केवल इस विशेष विन्यास में दिखाना संभव है?
के उत्तर "कैसे AsmJob TStringGrid करने के लिए आवंटित हो जाता है इतना है कि TStringGrid AsmJob नष्ट कर देता है, तो आप हमें दिखा सकते हैं?"
MyGrid = TStringGrid
public
AsmJob: TAsmJob;
end;
तो TForm.Create (फार्म का है कि ग्रिड रखती है) में कहीं, मैं
MyGrid.AsmJob=AsmJob;
करते हैं और MyGrid का नाशक में मुझे क्या करना:
begin
FreeAndNil(AsmJob);
inherited
end;
धन्यवाद अलेक्जेंडर। मुझे "ScanMemoryPoolForCorruptions" के बारे में कोई जानकारी नहीं थी। मुझे लगता है कि फास्टएमएम डीएलएल द्वारा पेश किया गया एक समारोह है। मैं अभी इसके बारे में खोज करने जाउंगा। – Ampere
यह मानक FastMM4.pas से फ़ंक्शन है। यह फास्टएमएम के पूर्ण स्टैंडअलोन संस्करण से है। यह फास्टएमएम के संस्करण में मौजूद नहीं है, जिसे डेल्फी में एकीकृत किया गया है। यहां प्रश्न में कोई डीएलएल नहीं है। यह सामान्य पास फ़ाइल में सिर्फ एक फ़ंक्शन है;) – Alex
दुख की बात है कि लिंक मर चुका है। लेकिन आप इसे यहां एक्सेस कर सकते हैं: http://web.archive.org/web/20091007162116/http://blog.eurekalog.com/?p=198 – EMBarbosa