घर
Top.Mail.Ru Yandeks.Metrika
मंच: "शुरुआती";
वर्तमान संग्रह: 2018.09.23;
डाउनलोड करें: [xml.tar.bz2];

नीचे

कृपया कोड में एक त्रुटि खोजने में मदद करें इसी तरह की शाखाएँ खोजें


Денис11998833   (2016-08-08 18:04) [0]

किसी सरणी में संरचनाओं को संग्रहीत करने के लिए एक कोड है:

यूनिट uTst; इंटरफ़ेस टाइप TGroupDests = (gDFile, gdReg, gdTweak, gdUnogn); TScanGroupsItem = रिकॉर्ड IdGroup: पूर्णांक; IdParentGroup: पूर्णांक; GroupDest: TGroupDests; समूह नाम: pstring; GroupDescr: pstring; IconInd: पूर्णांक; VclFakeGroup: बूलियन; शेड्यूलरफिक्स: बूलियन; अंत; PScanGroupsItem = ^ TScanGroupsItem; TScanGroupsList = array of PScanGroupsItem; प्रक्रिया TstLoader; प्रक्रिया TstUnloader; वर ScanGroupsList: TScanGroupsList; ScanGroupsCnt: पूर्णांक; TstText1, TstText2: string; कार्यान्वयन प्रक्रिया TstLoader; वर ScanGroupsItem: PScanGroupsItem; i: पूर्णांक; शुरू करना TstText1: = "Tst text1"; TstText2: = "Tst text2"; ScanGroupsCnt: = 0; i: = 0 से 40 करते हैं शुरू करना GetMem (ScanGroupsItem, SizeOf (TScanGroupsItem)); ScanGroupsItem ^ .IdGroup: = 11; ScanGroupsItem ^ .IdParentGroup: = 111; ScanGroupsItem ^ .GroupDest: = gdReg; ScanGroupsItem ^ .GroupName: = @ TstText1; ScanGroupsItem ^ .GroupDescr: = @ TstText2; ScanGroupsItem ^ .VclFakeGroup: = गलत; ScanGroupsItem ^ .SchedForFix: = True; इंक (ScanGroupsCnt); सेट-लैंथ (ScanGroupsList, ScanGroupsCnt); ScanGroupsList [ScanGroupsCnt]: = ScanGroupsItem; अंत; अंत; प्रक्रिया TstUnloader; var i: पूर्णांक; शुरू करना i: = 1 के लिए स्कैनग्रुप्स करें FreeMem (PScanGroupsItem (ScanGroupsList [i])); अंत; अंत।

मैं OnCreate फॉर्म में TstLoader को कॉल करता हूं। जब मैं एप्लिकेशन को बंद करता हूं, मुझे GETMEM.INC मॉड्यूल के SysFreeMem फ़ंक्शन में एक्सेस उल्लंघन मिलता है:

समारोह SysFreeMem (P: सूचक): पूर्णांक; एएसएम {$ ifdef CPU386} {--------------- 32- बिट बास SysFreeMem ---------------} {प्रवेश पर: बाज = पी} {Edx में ब्लॉक हेडर प्राप्त करें} Mov edx, [eax - 4] {क्या यह उपयोग में छोटा ब्लॉक है? " परीक्षण dl, IsFreeBlockFlag + IsMediumBlockFlag + IsLargeBlockFlag {सूचक को ecx में सहेजें} mov ecx, eax {सहेजें ईबेक्स} धक्का दे दो {Bl में IsMultiThread वैरिएबल प्राप्त करें} Mov bl, IsMultiThread {क्या यह एक छोटा सा ब्लॉक है जो उपयोग में है?} jnz @NotSmallBlockInUse {क्या हमें ब्लॉक प्रकार को लॉक करने की आवश्यकता है? " परीक्षा bl, bl {ईबेक्स में छोटे ब्लॉक प्रकार प्राप्त करें} Mov ईबेक्स, TSmallBlockPoolHeader [edx] .BlockType {क्या हमें ब्लॉक प्रकार को लॉक करने की आवश्यकता है? " jnz @LockBlockTypeLoop @GotLockOnSmallBlockType: {वर्तमान स्थिति: edx = @SmallBlockPoolHeader, ecx = P, ebx = @SmallBlockType} {उपयोग में ब्लॉक की संख्या में कमी} उप TSmallBlockPoolHeader [edx] .BlocksInUse, 1 {पुराना पहला मुफ्त ब्लॉक प्राप्त करें} Mov ईएक्सएक्स, टीएसएमलॉकब्लपहेल्डर [edx] .FirstFreeBlock {क्या अब पूल खाली है? " jz @PoolIsNowEmpty {क्या पूल पूरा भर गया था? " टेस्ट ईएक्स, ईएक्सएक्स {इसे नया पहला फ्री ब्लॉक स्टोर करें} Mov TSmallBlockPoolHeader [edx] .FirstFreeBlock, ecx {पिछले शीर्ष मुक्त ब्लॉक को ब्लॉक हेडर के रूप में संग्रहित करें} lea eax, [eax + IsFreeBlockFlag] मूव [Ecx - 4], ईएक्सएक्स {भरा हुआ है तो पूल को लिंक की गई सूची में वापस डालें ” jz @SmallPoolWasFull {सब ठीक है} xor eax, eax {ब्लॉक प्रकार अनलॉक करें} Mov TSmallBlockType [ebx] .BlockTypeLocked, al {रजिस्टर पुनर्स्थापित करें} पॉप ईबेक्स {} हो गया गीला करना {शाखा लक्ष्य को संरेखित करें} nop

इस लाइन का अपवाद है:
{ब्लॉक प्रकार अनलॉक करें} Mov TSmallBlockType [ebx] .BlockTypeLocked, al

कृपया बताएं कि मैं क्या गलत कर रहा हूं? ..



Игорь Шевченко ©   (2016-08-08 19:03) [1]


> FreeMem (PScanGroupsItem (ScanGroupsList [i]));


FreeMem (PScanGroupsItem (ScanGroupsList [Pred (i)]));

गतिशील सरणियों को खरोंच से अनुक्रमित किया जाता है।



Денис11998833   (2016-08-08 19:33) [2]

बहुत बहुत धन्यवाद! मेरे सिर से बाहर उड़ गया (



iop ©   (2016-08-09 08:52) [3]

ScanGroupsCnt - सुपरफ्लुएंस चर



Kilkennycat ©   (2016-08-09 10:15) [4]


> iop © (09.08.16 08: 52) [3]

यह सूचना के उद्देश्यों के लिए है। और विश्वसनीयता। सरल "और" अविश्वसनीय और असंक्रामक



iop ©   (2016-08-09 10:29) [5]

hto, और सरणी की लंबाई के साथ एक फ्रेम पर एक चक्र में भी?



Kilkennycat ©   (2016-08-09 11:10) [6]

एक और बात है, वहाँ यह 1 से शुरू होता है।



Тимохов Дима ©   (2016-08-12 01:28) [7]


> डेनिसएक्सएनयूएमएक्स (एक्सएनयूएमएक्स एक्सएनयूएमएक्स: एक्सएनयूएमएक्स)


सहकर्मी, आपने रेंज चेकिंग को बंद क्यों किया?
कोड या सम्मान में {R +} डालेंगे। परियोजना सेटिंग्स में एक पंजा - और तुरंत इसे खुद मिल जाएगा।

मुझे पता है कि सरणी की सीमाओं पर कई अक्षम चेक। लेकिन मेरा IMHO, कि विकास के स्तर पर यह बहुत उपयोगी चीज है।

और मुकाबला विधानसभा में, आप इसे बंद कर सकते हैं।



Kilkennycat ©   (2016-08-12 01:46) [8]


> और एक लड़ाकू विधानसभा में, आप कर सकते हैं

कम () उच्च () या समान का उपयोग करें



Германн ©   (2016-08-12 02:11) [9]


> किलकेनीकट © (12.08.16 01: 46) [8]
>
>
Quoted1 >> और एक लड़ाकू विधानसभा में, आप कर सकते हैं
>
> कम उपयोग () उच्च ()

यहाँ किसी भी निर्माण के लिए एक अच्छी टिप है!



पन्ने: 1 पूरी शाखा

मंच: "शुरुआती";
वर्तमान संग्रह: 2018.09.23;
डाउनलोड करें: [xml.tar.bz2];

ऊपर





मेमोरी: 0.58 एमबी
समय: 0.013 c
2-1471034827
Pavor
2016-08-12 23:47
2018.09.23
फ़ील्ड, लेबल, चित्र संपादित करें के साथ एक दस्तावेज़ प्रदर्शित करें ..


2-1470668686
Denis11998833
2016-08-08 18:04
2018.09.23
कृपया कोड में एक त्रुटि खोजने में मदद करें


15-1474373519
KIPOR
2016-09-20 15:11
2018.09.23
आईडीई डेल्फी एक्सई - डीएफएम मोड में मिटाए गए बुकमार्क


1-1359435539
tButton
2013-01-29 08:58
2018.09.23
स्टैक ओवरफ़्लो





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский