ورود

View Full Version : مشکل Access Violation



حمیدرضاصادقیان
چهارشنبه 25 اردیبهشت 1387, 17:05 عصر
سلام دوستان. من در یکی از فرمهام کد زیر رو در یک تابع نوشتم و مقدار رکورد مورد نظر رو که در یک یونیت اصلی تعریف شده رو پر می کنم.


While Not(Eof) do
begin
if fieldvalues['rdf']<1 then
Begin
Next;
Continue;
End
Else
Begin
sharh_rec_rize[stgFaFoRizRiz.row-1].rdf:=fieldvalues['rdf'];//recordset.Fields.item[0].value;
sharh_rec_rize[stgFaFoRizRiz.row].disk:=fieldvalues['disk1'];//recordset.Fields.item[2].value;
stgFa_frosh.cells[4,fieldvalues['rdf']-1]:='*';
stgFaFoRizRiz.cells[0,stgFaFoRizRiz.row]:=fieldvalues['Rdf'];
stgFaFoRizRiz.cells[1,stgFaFoRizRiz.row]:=fieldvalues['disk1'];
// If stgFaFoRizRiz.Row=stgFaFoRizRiz.RowCount-1 then
// stgFaFoRizRiz.RowCount:=stgFaFoRizRiz.RowCount+1;
stgFaFoRizRiz.row:=stgFaFoRizRiz.row+1;
End;
Next;
End;


وقتی که این فرم رو فقط باز میکنم و می بندم و کل برنامه رو میبندم بهم پیغام AV میده که آدرسش در Cpu رو در عکس زیر ضمیمه میکنم.
اینم وقتی رخ میده که کامل برنامه بسته شده.
اصلا چیزی باز نیست.
ولی وقتی اون دوخطی که در بالا مشخص کردم رو کامنت میکنم مشکلی نداره.

AlirezaBahredar
پنج شنبه 26 اردیبهشت 1387, 10:57 صبح
با سلام...
معمولا errorهای AV دلایل مختلفی داره ....اگه بخاطر داشته باشی توی یکی از پست ها چند وقت پیش یکی از دوستان نحوی بدست آوردن خطی که موجب ایجاد AV میشه رو توضیح دادخ بود(از طریق Mapفایل....)
این روش روش اصولی هست اما تا حدود زیادی سخت و پر دردسر هست...و در ضمن در برخی موارد(عرض می کنم برخی موارد) جواب نمی ده مثل مواردی که AV به دلیل Lack رخ می ده .
چند مدت پیش در یک سایت تبلیغ یک Plugin واسه دلفی دیدم به اسمه EurekaLog.این Plugin فوق العادست واقعا فوق العادست.
یکی از اساسی ترین کار های این Plugin پیدا نمودن AV از هر نوعی و نشان دادن محل رخ دادن آن مشروط بر اینکه AV از کد شما باشد می شود.
حتی چنانچه AV رخ داده شده احیانا از DLL های سیستمی باشد این Plugin نام DLL مورد نظر را به شما اعلام می کند.
اگه خواستی بگو تا این Plugin رو برات بفرستم.
موفق باشی.

حمیدرضاصادقیان
پنج شنبه 26 اردیبهشت 1387, 15:55 عصر
سلام.ممنون دوست عزیز.من اینکارو انجام دادم.اینم لاگی هست که این پلاگین به من داده.

حمیدرضاصادقیان
پنج شنبه 26 اردیبهشت 1387, 16:14 عصر
سلام.
مشکل حل شد اونم با تغییر خط زیر


sharh_rec_rize[stgFaFoRizRiz.row-1].rdf

به جای این خط نوشتم



sharh_rec_rize[stgFaFoRizRiz.row].rdf

چون ردیف اول Stringgrid برابر 1 بود و یک مقدار ازش کم میکنه مقدارش 0 میشه. ولی به راحتی مقدار رو جایگزین میکنه و هیچ مشکلی هم نداره.اخه برای من سوال اینه که چرا وقتی که همه فرمها کامل بسته شدند خطا میده.
البته میگم وقتی -1 رو ازش حذف کردم مشکل حل شد. ولی ممنون میشم دوستان دلیلش رو بررسی کنند و مطرح کنند.

حمیدرضاصادقیان
شنبه 28 اردیبهشت 1387, 19:39 عصر
دوستان در رابطه با این مشکل نظری ندارند؟

اصغر (پآچ)
سه شنبه 07 خرداد 1387, 19:55 عصر
اوه ببخشید من نمی دونستم که اون یه Warez هستش.
ممنون که متذکر شدید

ب- تات
دوشنبه 11 آذر 1387, 04:58 صبح
يك مشكل عجيب هم من دارم و اون اينه كه در بين كاربران برنامم بصورت راندوم پيام AV ظاهر ميشه و امكان داره كه اگر دوباره برنامه رو اجرا كنن ديگه پيام ظاهر نشه و اين داره اذيتم ميكنه در ضمن من در اولين Uses برنامه sharemem را قرار دادم اما كفايت نكرده .ميشه راهنمائي فرمائيد.