PDA

View Full Version : خطا در استفاده از آرایه



mehdi_mohamadi
دوشنبه 31 اردیبهشت 1386, 21:04 عصر
ایا کسی دلیل صدور این خطا رو می دونه؟



http://barnamenevis.org/forum/C:\Documents and Settings\mehdi\My Documents\My Pictures\Error.jpg

mehdi_mohamadi
دوشنبه 31 اردیبهشت 1386, 21:11 عصر
اینم پیغام خطا

SYNDROME
دوشنبه 31 اردیبهشت 1386, 21:13 عصر
با سلام
آرایه تو ساخته نشده و می خواهی از آن استفاده کنی.
نحوه تعریف آرایه و استفاد ه از آن را بنویس .

Hamid_PaK
دوشنبه 31 اردیبهشت 1386, 21:26 عصر
من هم نظر علی رو تایید میکنم ، احتمال زیاد حافظه تخصیص نیافته است ...
با SetLength می توانید این عمل را انجام دهید.

یا حق ...

mehdi_mohamadi
چهارشنبه 02 خرداد 1386, 07:01 صبح
ممکنه یه مثال بزنید

vcldeveloper
چهارشنبه 02 خرداد 1386, 08:06 صبح
اگه Dynamic Array تعریف می کنید، تا زمانی که بهش مقداری اختصاص ندید و براش طول مشخص نکنید، حافظه ایی به اون اختصاص پیدا نمیکنه و فقط یک اشاره گر به Nil هست. همین مطلب برای نوع داده string هم صدق میکنه. مثلا کد زیر خطای AV تولید می کنه:


var
S: string;
begin
S[1] := 'a';
end;

SYNDROME
چهارشنبه 02 خرداد 1386, 13:36 عصر
با سلام


Type
TStringArray = Array[1..7] of String;
Var
FormCaption : TStringArray;

Arman_1367
چهارشنبه 02 خرداد 1386, 17:47 عصر
اگر آرایه شما پویا باشد باید با SetLenght برای آن حافظه بگیرید.این دقیقاً همان حرف دوستان است و کاملاً درست می باشد.اگر کد زیر را هم بخوانی زیاد بد نیست:

var
A, B: array of Integer;
begin
SetLength(A, 1);
A[0] := 1;
B := Copy(A);
B[0] := 2; { B[0] <> A[0] }
end;
از تابع Copy برای کپی تمام آرایه استفاده می شود.و این هم مثال برای آرایه پویا دو بعدی که قابل تعمیم با n بعدی می باشد.
var
A : array of array of string;
I, J : Integer;
begin
SetLength(A, 10);
for I := Low(A) to High(A) do
begin
SetLength(A[i], I);
for J := Low(A[i]) to High(A[i]) do
A[I,J] := IntToStr(I) + ',' + IntToStr(J) + ' ';
end;
end;
یا حق...