PDA

View Full Version : Invalid pointer operation



rezvan_DP
سه شنبه 13 اسفند 1387, 18:21 عصر
با سلام
می خواستم بدونم رعایت نکردن چه نکاتی منجر به خطای Invalid pointer operation میشه؟

با تشکر

vcldeveloper
سه شنبه 13 اسفند 1387, 23:51 عصر
خیلی کلی هست. بهتر هست توضیح بدید که چکاری انجام دادید، یا چه کدی نوشتید که این خطا را دریافت کردید.

rezvan_DP
چهارشنبه 14 اسفند 1387, 19:04 عصر
- با کدی مشابه این در یک حلقه ،از DB رکوردها رو می خونم:

for id:=1 to n do
begin
query.SQL.Clear;
query.SQL.Text:='select count(item_id) from table where user_id like '+IntToStr(id) ;
query.Active:=true;
...

وقتی برنامه رو trace می کنم ، بعد از دوبار تکرار این خطا پیش میاد، البته گاهی هم تا آخر حلقه اجرا میشه!

- علاوه بر اون از آرایه های پویا هم استفاده کردم ، که بعد از پایان استفاده اونها رو free کردم.
به نظرمن موارد مشکوک این دو مورد هستند.

متشکرم.

vcldeveloper
چهارشنبه 14 اسفند 1387, 23:01 عصر
با کدی مشابه این در یک حلقه ،از DB رکوردها رو می خونم
این کد کمکی نمیکنه. وقتی خطا دریافت می کنید، برنامه را Break کنید، و به پنجره Call Stack دقت کنید، ببینید در کدوم تابع یا متد خطا رخ داده.


علاوه بر اون از آرایه های پویا هم استفاده کردم ، که بعد از پایان استفاده اونها رو free کردم.
بهتر هست کد این قسمت را اینجا بزارید. ارایه های پویا نیازی به Free شدن ندارند، دلفی خودش آنها را آزاد میکنه.

rezvan_DP
پنج شنبه 15 اسفند 1387, 08:18 صبح
آقای کشاورز، از راهنماییهای همیشه خوب شما سپاسگزارم.

من در برنامه از چند آرایه پویا استفاده کردم که تعریف و گرفتن حافظه برای اونها رو به این صورت انجام دادم:

A1:array of array of double ;

...
SetLength(A1,num_of_rows);

...

for i:=1 to num_of_rows do
SetLength(A1[i],num_of_col );
...

A1[i,j]:=x*y;
...
و در پایان هم مقدار nil رو به اونها انتساب دادم.

متشکرم

vcldeveloper
پنج شنبه 15 اسفند 1387, 12:45 عصر
دقت کنید که عناصر آرایه های پویا همیشه از ایندکس صفر شروع میشند، نه از ایندکس 1. در ضمن، چگونگی استفاده از این آرایه ها را هم بررسی کنید. احتمالا جایی به شکل اشتباهی سعی در دسترسی به یکی از عناصر آرایه داشتید. بهترین راه همان استفاده از پنجره Call Stack هست، تا ببینید در هنگام خطا چه رویه هایی به ترتیب در حال اجرا بودند.