منزل
Top.Mail.Ru Yandeks.Metrika
المنتدى: "المبتدئين";
الأرشيف الحالي: 2018.09.23;
تنزيل: [xml.tar.bz2];

إلى

مساعدة يرجى العثور على خطأ في الرمز البحث عن فروع مماثلة


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

هناك رمز لتخزين الهياكل في مجموعة:

وحدة uTst. السطح البيني نوع TGroupDests = (gdFile ، gdReg ، gdTweak ، gdUnknown) ؛ TScanGroupsItem = سجل IdGroup: عدد صحيح IdParentGroup: integer؛ GroupDest: TGroupDests؛ اسم المجموعة: pstring؛ GroupDescr: pstring؛ IconInd: عدد صحيح. VclFakeGroup: منطقية. SchedForFix: منطقية. ينتهي. PScanGroupsItem = ^ TScanGroupsItem؛ TScanGroupsList = صفيف PScanGroupsItem؛ إجراء TstLoader. إجراء TstUnloader. فار ScanGroupsList: TScanGroupsList؛ ScanGroupsCnt: integer؛ TstText1، TstText2: string؛ تطبيق إجراء TstLoader. فار ScanGroupsItem: PScanGroupsItem؛ i: عدد صحيح بدأ TstText1: = "Tst text1"؛ TstText2: = "Tst text2"؛ ScanGroupsCnt: = 0؛ بالنسبة إلى i: = 0 to 40 do بدأ GetMem (ScanGroupsItem ، SizeOf (TScanGroupsItem)) ؛ ScanGroupsItem ^ .IdGroup: = 11؛ ScanGroupsItem ^ .IdParentGroup: = 111؛ ScanGroupsItem ^ .GroupDest: = gdReg؛ ScanGroupsItem ^ .GroupName: = @ TstText1؛ ScanGroupsItem ^ .GroupDescr: = @ TstText2؛ ScanGroupsItem ^ .VclFakeGroup: = False؛ ScanGroupsItem ^ .SchedForFix: = True؛ Inc (ScanGroupsCnt) ؛ SetLength (ScanGroupsList ، ScanGroupsCnt) ؛ ScanGroupsList [ScanGroupsCnt]: = ScanGroupsItem؛ ينتهي. ينتهي. إجراء TstUnloader. var i: integer؛ بدأ من أجل i: = 1 to ScanGroupsCnt do FreeMem (PScanGroupsItem (ScanGroupsList [i]))؛ ينتهي. نهاية.

أدعو TstLoader في شكل OnCreate. عندما أغلق التطبيق ، أحصل على انتهاك وصول في وظيفة SysFreeMem بوحدة GETMEM.INC:

وظيفة SysFreeMem (P: مؤشر): عدد صحيح ؛ ASM {$ ifdef CPU386} {--------------- 32-bit BASM SysFreeMem ---------------} {عند الدخول: eax = P} {الحصول على رأس الكتلة في edx} mov edx، [eax - 4] {هل هو كتلة صغيرة في الاستخدام؟} اختبار دل ، IsFreeBlockFlag + IsMediumBlockFlag + IsLargeBlockFlag {احفظ المؤشر في ecx} وسائل التحقق ecx ، eax {حفظ ebx} دفع ebx {الحصول على متغير IsMultiThread باللون bl} وسائل التحقق bl ، IsMultiThread {هل هو كتلة صغيرة قيد الاستخدام؟} jnzNotSmallBlockInUse {هل نحن بحاجة إلى قفل نوع الكتلة؟} اختبار bl ، bl {احصل على نوع الكتلة الصغيرة في ebx} وسائل التحقق ebx ، TSmallBlockPoolHeader [edx] .BlockType {هل نحن بحاجة إلى قفل نوع الكتلة؟} jnzLockBlockTypeLoop GotLockOnSmallBlockType: {الحالة الحالية: edx =SmallBlockPoolHeader ، ecx = P ، ebx =SmallBlockType} {إنقاص عدد الكتل المستخدمة} sub TSmallBlockPoolHeader [edx] .BlocksInUse، 1 {احصل على أول كتلة مجانية قديمة} وسائل التحقق ، TSmallBlockPoolHeader [edx] {هل المسبح فارغ الآن؟} jzPoolIsNowEmpty {هل كان المسبح ممتلئًا؟} اختبار eax ، eax {قم بتخزين هذا كأول كتلة مجانية جديدة} وسائل التحقق TSmallBlockPoolHeader [edx] .FirstFreeBlock ، ecx {قم بتخزين الكتلة المجانية الأولى السابقة كرأس كتلة} ليا eax ، [eax + IsFreeBlockFlag] mov [ecx - 4]، eax {أدخل المجموعة مرة أخرى في القائمة المرتبطة إذا كانت ممتلئة} jzSmallPoolWasFull {الكل حسنًا} إكسور إكس ، إكس {فتح نوع الكتلة} mov TSmallBlockType [ebx] .BlockTypeLocked، al {استعادة السجلات} البوب ​​ebx {تم} عطن {محاذاة هدف الفرع} ج: 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]

ما هو ، وحتى في حلقة على frim على طول مجموعة؟



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

هناك شيء آخر ، حيث يبدأ بـ 1.



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


> Denis11998833 (08.08.16 18: 04)


زميل ، لماذا قمت بإيقاف تشغيل Range Range؟
هل وضعت {R +} في الكود أو resp. داو في إعدادات المشروع - وعلى الفور قد وجدت ذلك بنفسي.

وأنا أعلم أن العديد من الشيكات تعطيل على حدود مجموعة. ولكن IMHO بلدي ، أنه في مرحلة التطوير هو شيء مفيد لعنة.

وفي التجمع القتالي يمكن إيقاف.



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


> وفي التجمع القتالي ، يمكنك

استخدم LOW () HIGH () أو ما شابه ذلك



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


> Kilkennycat © (12.08.16 01: 46) [8]
>
>
Quote1 >> وفي مجموعة قتالية ، يمكنك ذلك
>
> استخدم LOW () HIGH ()

هنا نصيحة جيدة لأي بناء!



صفحات: 1 فرع كامل

المنتدى: "المبتدئين";
الأرشيف الحالي: 2018.09.23;
تنزيل: [xml.tar.bz2];

الطابق العلوي





الذاكرة: 0.58 ميغابايت
الوقت: 0.012 ج
1-1359435539
tButton
2013-01-29 08:58
2018.09.23
تجاوز المكدس


15-1474373519
KIPOR
2016-09-20 15:11
2018.09.23
IDE Delphi XE - إشارة مرجعية تمحى في وضع DFM


2-1470668686
Denis11998833
2016-08-08 18:04
2018.09.23
مساعدة يرجى العثور على خطأ في الرمز


2-1471034827
رعب
2016-08-12 23:47
2018.09.23
عرض وثيقة مع تحرير الحقول ، والعلامات ، والصور ..





الأفريكانية الألبانية عربي الأرميني أذربيجان الباسكي البيلاروسية Bulgarian التشيكية الصينية المبسطة) تقاليد صينية) الكرواتية التشيكية دانماركي Dutch English الإستونية الفلبينية Finnish جيب
الجاليكية الجورجية الألمانيّة اليونانيّة الكريولية الهايتية اللغة العبرية الهندية الهنغارية أيسلندي Indonesian الأيرلندية Italian اليابانيّة الكوريّة اللاتفية اللتوانية المقدونية الملايو المالطية Norwegian
اللغة الفارسية بولنديّة البرتغاليّة رومانية Russian صربي السلوفاكيّة سلوفيني إسباني السواحيلي Swedish Thai التركية الأوكراني الأردية الفيتنامية ويلزي اليديشية البنغالي البوسنية
السيبيونو الاسبرانتو الغوجاراتية الهوسا همونغ الإيبو جاوي الكانادا الخمير لاو لاتينية الماوري المهاراتية المنغولية النيبالية البنجابية الصومالية التاميل التيلجو اليوروبا
زولو
Английский Французский ألماني Итальянский البرتغالية Русский Испанский