PDA

View Full Version : سوال: اشکال Access Violation هنگام انتساب رشته خالی که تعریف شده؟!



mbshareat
چهارشنبه 04 اسفند 1389, 22:35 عصر
سلام علیکم
من یه برنامه دارم که عناوین یک کتاب را می خواند .برنامه من تا صفحه حدود چهارصد( چون الان کنار در محل کار نیستم صفحه دقیق رو نمیتونم بگم) پیش میرود و مشکل ندارد. اما به صفحه خاصی که میرسد ایراد میگرد.من تو برنامم یه متغیر رشته دارم به نام Tmp که هنگام انتساب مقدار در فایل خاصی از کتاب که تشکیل شده از یک توالی از فایل اجرای برنامه را دچار مشکل میکند!
من یه چنین کدی تو برنامم گذاشتم که محل اشکال رو پیدا کنم:
if CurPage>480 Then
Showmessage(IntToStr(1));
Tmp:='';
if CurPage>480 Then
Showmessage(IntToStr(2));
Tmp:=Copy(S,Ins2+4,800);
جالب این است که پیغام اول رو نمایش میده ولی قبل از پیغام دوم اشکال Access Violation می گیره!
حتی وقتی جای پیغام اول
ShowMessage(WinStr(Copy(S,Ins2,800) میذارم رشته رو نشون میده!
ممنون میشم اگه کسی منو راهنمایی کنه!

Felony
پنج شنبه 12 اسفند 1389, 10:25 صبح
چه راهنمایی ، ما از کجا بدونیم محتوای متغییر S چیه ؟! از کجا بدونیم ایندکسی که تو تابع Copy دادید در رنج رشته هست یا نه ؟!

* چرا برای نمایش پیغام به این روش عملی کردید : Showmessage(IntToStr(1));

mbshareat
دوشنبه 16 اسفند 1389, 23:57 عصر
سلام
ببخشید فکر کنم یه کم دیر جواب دادین که من جوای شما رو ندیدم.
من از ماکروی متنی برای نمایش مقدار استفاده می کنم و حوصله تایپ ندارم فقط خواستم بدونم تا کجای برنامه بدون اشکال اجرا شده.
به نظرم اومد لازم نیست در مورد S صحبت کنم چون قبل از اینکه S توسط برنامه بررسی بشه پیغام خطا میده و برنامه متوقف میشه.
در هر حال S پارامتر تابع زیره:

Procedure TEasyTreeForm.GetFileSign(S:String;FileNo:SmallInt );
که یه رشته هستش که تمام فایل کوچک کوچکتر از 30 کیلوبایت رو در یه حلقه توی اون می ریزم و با این تابع محتوای S رو بررسی می کنم و کارکترهای ویژه که نمایانگر صفحه و عنوان هستند با این تابع بررسی می کنم.
اگه کل تابع رو بریزم باز هم نا مفهومه چون از متغیرهای عمومی استفاده کردم و ساختار فایلهای داده هم باید توضیح داده بشن.(مثلا عناوین داخل آکولاد+J محصورند و ...)
در هر صورت خودم هم اعتراف می کنم که توضیحم کافی نبود فقط تعجبم از این بود که چرا در خطی از کد که امکان نداره ایراد داشته باشه با پیغام Access Violation مواجه شدم؟!
این کد کل یونیته نمی دونم کمکی می کنه یا نه؟

Felony
سه شنبه 17 اسفند 1389, 12:12 عصر
اینوری نمیشه کمک خاصی کرد ، اگر میتونید برنامتون رو قرار بدید یا اون قسمت که مشکل داره رو تو یک برنامه جدا پیاده کنید و قرارش بدید .