डेल्फी XE जोड़ने, विंडोज 7 64-बिटडेल्फी स्मृति रिसाव जब भाषा
आप एक खाली आवेदन करने के लिए भाषा समर्थन जोड़ने जब आप एक स्मृति रिसाव (FastMM4) प्राप्त होगा।
पुन: पेश करने के लिए:
- बनाने नई VCL रूपों आवेदन
- .dpr को संशोधित करने और जोड़ने
ReportMemoryLeaksOnShutdown := True;
- बिल्ड/आवेदन चलाने के लिए और अनुप्रयोग बंद -> कोई लीक अब
- सूचना दी एक भाषा जोड़ें (परियोजना -> भाषाएं -> जोड़ें)
- बिल्ड/फिर से चलाएं और एप्लिकेशन बंद करें -> मेमोरी रिसाव ??
FastMM4 पूर्ण डिबग मोड की रिपोर्ट:
--------------------------------2013/7/16 14:54:34--------------------------------
A memory block has been leaked. The size is: 12
This block was allocated by thread 0x17EC, and the stack trace (return addresses) at the time was:
40455E
40952D
4094C8
409834
409941
450058
74548D76 [Unknown function at FirstHookFunc]
7778FA1A [ZwOpenKey]
75924033 [OpenRegKey]
759240AE [OpenRegKey]
777FA71A [Unknown function at RtlUlonglongByteSwap]
The block is currently used for an object of class: Unknown
The allocation number is: 6
Current memory dump of 256 bytes starting at pointer address 7EF9A610:
6E 00 6C 00 2D 00 42 00 45 00 00 00 41 58 0D 7A 00 00 00 00 C1 A6 F9 7E 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 2E 00 00 00 5E 45 40 00 DD 99 40 00 6D 71 4B 00 98 65 40 00 04 66 40 00
77 A6 40 00 98 7C 4B 00 AA 33 8D 76 F2 9E 7A 77 C5 9E 7A 77 00 00 00 00 EC 17 00 00 EC 17 00 00
1F 9A 40 00 53 7F 42 00 2C 65 40 00 EA 68 40 00 E3 7C 4B 00 AA 33 8D 76 F2 9E 7A 77 C5 9E 7A 77
00 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 B6 5C 27 4D 5C 12 4C 00 80 80 80 80
49 A3 D8 B2 80 80 80 80 00 00 00 00 F9 B7 F9 7E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
65 00 00 00 5E 45 40 00 A7 50 40 00 22 56 40 00 DC 50 40 00 5F 72 4B 00 78 96 44 00 8E 72 4B 00
98 65 40 00 04 66 40 00 77 A6 40 00 98 7C 4B 00 EC 17 00 00 EC 17 00 00 7A 45 40 00 C5 50 40 00
n . l . - . B . E . . . A X . z . . . . Á ¦ ù ~ . . . . . . . .
. . . . . . . . . . . .^E @ . Ý ™ @ . m q K . ˜ e @ . . f @ .
w ¦ @ . ˜ | K . ª 3 v ò ž z w Å ž z w . . . . ì . . . ì . . .
. š @ . S B . , e @ . ê h @ . ã | K . ª 3 v ò ž z w Å ž z w
. . . . . . . . . . . . . . . . . . . . ¶ \ ' M \ . L . € € € €
I £ Ø ² € € € € . . . . ù · ù ~ . . . . . . . . . . . . . . . .
e . . .^E @ . § P @ . " V @ . Ü P @ . _ r K . x – D . Ž r K .
˜ e @ . . f @ . w ¦ @ . ˜ | K . ì . . . ì . . . z E @ . Å P @ .
--------------------------------2013/7/16 14:54:34--------------------------------
This application has leaked memory. The small block leaks are (excluding expected leaks registered by pointer):
5 - 12 bytes: Unknown x 1
Note: Memory leak detail is logged to a text file in the same folder as this application. To disable this memory leak check, undefine "EnableMemoryLeakReporting".
अब अजीब हिस्सा करने के लिए: भाषा को हटा दें और फिर से चलाने के -> रिसाव रहता है!
मैं .dpr और .res फ़ाइलों को छोड़कर सभी प्रोजेक्ट संबंधित फ़ाइलों (.dproj, .dproj2007, .dsk और so ..) को हटाकर रिसाव को हटा सकता हूं।
क्या कोई मुझे बता सकता है कि क्या हो रहा है?
अद्यतन
विवरण लॉग से पतों का उपयोग, ऐसा लगता है मैं System.Pas में रिसाव पाया: PreferredLanguagesOverride
PChar
के लिए
var
PreferredLanguagesOverride: PChar = nil;
...
procedure SetLocaleOverride(const NewPreferredLanguages: string);
var
L: Integer;
begin
if PreferredLanguagesOverride <> nil then
FreeMem(PreferredLanguagesOverride);
L := Length(NewPreferredLanguages);
if L > 0 then
begin
Inc(L);
GetMem(PreferredLanguagesOverride, L * SizeOf(Char));
MoveChars(NewPreferredLanguages[1], PreferredLanguagesOverride^, L);
end;
end;
SetLocaleOverride कहा जाता है और भंडार स्मृति। मैंने FreeMem(PreferredLanguagesOverride)
के लिए System.Pas स्कैन किया लेकिन यह एकमात्र घटना है!
UPDATE2
मैं कारण है कि डेल्फी कॉल पाया SetLocaleOverride
दिनचर्या:
जब आप भाषा समर्थन जोड़ने के लिए, एक रजिस्ट्री कुंजी निष्पादन पूरा पथ के रूप में नाम और वर्तमान सिस्टम स्थान के साथ बनाई गई है मूल्य के रूप में: HKEY_CURRENT_USER \ Software \ Embarcadero \ Locales
इस कुंजी को हटाने से डेल्फी SetLocaleOverride
दिनचर्या को कॉल करने से रोकती है।
प्रश्न:
- कोई पुष्टि कर सकते हैं, तो इस समस्या में मौजूद बाद में डेल्फी संस्करणों?(या कोई अन्य मैं एक QC रिपोर्ट)
अद्यतन 3
वहाँ पहले से ही एक QC report (105136) है और यह XE3
से निर्धारित किया गया हैप्रश्न: किसी ने मुझे दिखा सकते हैं कि यह कैसे समझौता कर दिया गया है एक्सई 3 में?
एक क्यूसी रिपोर्ट जमा करें, और RegisterExpectedMemoryLeak पर कॉल करें। –
डेल्फी XE3, विंडोज 7 64-बिट में पुन: उत्पन्न नहीं कर सकता ... – TLama
@ टलामा: धन्यवाद, जाहिर है यह आपके संस्करण में तय किया गया है :) – whosrdaddy