PDA

View Full Version : یک خطای عجیب در تخصیص فضا برای آرایه دینامیکی



Hadizadeh
سه شنبه 26 تیر 1386, 08:30 صبح
سلام. من یک آرایه دینامیکی دوبعدی عمومی (Global) دارم. بار اول توسط تابع زیر براش حافظه می گیرم:


SetLength(DynamicArray,10,20);

ولی دفعه دوم که می خوام سایزش رو تغییر بدم خطای Access Violation می ده! حتی اگه بخوام پس از بار اول اون را آزاد کنم (DynamicArray:=nil) هم چنین مشکلی دارم. به نظر شما راه حل چیه؟ ممنون

Arman_1367
سه شنبه 26 تیر 1386, 10:12 صبح
این روش را با دلفی 7 هزار بار تست کردم هیچ مشکلی نداره.

Type
TArmanArray = array of integer;
TArmanArray2 = Array of TArmanArray;
Var Ar:TArmanArray2;
i:integer;
begin
SetLength(Ar,10);
For I:=0 to 9 do
SetLength(Ar[i],10);
For I:=0 to 9 do
Ar[i]:=nil;
Ar:=nil;
end;

Hadizadeh
سه شنبه 26 تیر 1386, 10:42 صبح
من هم تا حالا باهاش مشکلی نداشتم ولی نمی دونم چرا حالا اینطوری شده؟! دلیلش می تونه به خاطر شلوغی کد باشه؟

Arman_1367
سه شنبه 26 تیر 1386, 11:02 صبح
کد من را تست کردید

Hadizadeh
سه شنبه 26 تیر 1386, 11:21 صبح
بله کد شما که کاملا بدیهی هست که کار میکنه چرا که روال کار اینه! در حقیقت وقتی من هم تو موضوع از کلمه عجیب استفاده کردم دقیقا به خاطر اینه که من هم خودم تعجب کردم که چرا تو کد نسبتا شلوغم این کار نمیکنه!

Inprise
سه شنبه 26 تیر 1386, 17:50 عصر
برای فهمیدن خطاهائی مثل این بهتره از چیزی مثل EurekaLog استفاده کنی . اگر برای خودت مفید نبود خروجی اش رو وقتی خطا رخ میده بذار اینجا .

Hadizadeh
یک شنبه 31 تیر 1386, 13:13 عصر
ممنونم. من این برنامه رو دیدم هرچند که بیشتر به یک برنامه جاسوسی عاقلانه شبیه بود. مثلا من فلسفه گرفتن ایمیل و ارسال گزارش از طریق اون رو درست نفهمیدم. البته شاید من اشتباه می کنم. به هر حال کد من اونقدر بزرگ هست که فکر نمی کنم اگه گزارش این برنامه رو هم برای شما بفرستم باز هم بتونه کمکم کنید. ولی یه چیزی برام جالبه. بینید من یکه آرایه دوبعدی دینامیک عمومی دارم که تا مرز مثلا 10*10 بیشتر بهش اکسس نمی کنم وقتی سایز اون رو مثلا میزارم 100*100 کار نمیکنه ولی مثلا یک عدد دیگه مثل 40*100 که میزارم کار می کنه البته در دو حالت اخیر به صورت استاتیک تعریفش می کنم! من فکر کنم این مشکل به خاطر باگ های دلفی هستش ولی نظر شما چیه؟

Inprise
یک شنبه 31 تیر 1386, 13:20 عصر
کار نمیکنه یعنی چی ؟

Hadizadeh
یک شنبه 31 تیر 1386, 13:24 عصر
یعنی بعضی موقع ها EAccessViolation می ده بعضی موقع ها هم EInvalidPointerOperation می ده! واقعا گیج شدم! جالبه که مثلا برنامه رو می بندم یک ساعت دیگه دوباره رانش می کنم این بار می بینی کار می کنه ولی وقتی که برنامه رو می بندم یک EInvalidPointerOperation می ده!

Inprise
یک شنبه 31 تیر 1386, 14:03 عصر
استفاده از ابزاری که پیشنهاد کردم باعث میشه به دقت جزئیات هر خطا رو بفهمی و وضعیت همه چیز رو در زمان رخداد خطا ببینی . طبیعتا بدون اینکه این مسائل به دقت بررسی بشن نمیشه حرفی زد . در مورد باگ در دلفی : من گزارشی در این مورد روی QC ندیدم . از کدام نگارش دلفی استفاده میکنی ؟

Hadizadeh
یک شنبه 31 تیر 1386, 14:08 عصر
دلفی 7 آخه اون گزارش هم چیز به درد به خوری نمیده! فقط مشخص میکنه که تو کدوم روتین مشکل رخ داده همین!

Hadizadeh
یک شنبه 31 تیر 1386, 14:33 عصر
آقای Inprise خوشبختانه الگوریتمم رو عوض کردم مشکل حل شد! ولی هنوز هم در عجبم که دلیل مشکل قبلی چی بود؟! به هر حال الان واسه من زندگی خیلی زیباست! برای شما چه طور؟