problem z tablicami

0

Zawsze jeśli chcę nadać wartość którejś z części tabeli, to wyskakuje "access violation</I>. Podam przykład:

var tablica : array of HWND;
     Edit      : HWND;
begin
  Edit := CreateWindow(parametry);
  tablica[0] := Edit;
end;
0

Bosh!!!

Tablica dynamiczna jaką stworzyłeś ma długość 0. Uzyj SetLength(tablica, dlugosc) by ustawić żądaną długość. Ja bym też unikał nazywania zmiennej typy HWND 'Edit', żeby nie było konfuzji* z kontrolką edycyjną.

*konfuzji czytającego człowieka, nie kompilatora

0

lub od razu podaj jej długość np. array[100] of .....

0

lub od razu podaj jej długość np. array[100] of .....

No, tak najlepiej. Od razu zarezerwuj sobie 1Gb pamięci na tablicę, a co!!

0

W zasadzie kolega pq udzielił już odpowiedzi, ja tylko wrzucę mały kodzik:

var 
  tablica: array of HWND;
  hEdit: HWND; // nazwa Edit jest nieco myląca
begin
  hEdit := CreateWindow(<i>parametry</i>);

  // zwiększenie rozmiaru tablicy dynamicznej tablica o 1
  SetLength(tablica, Length(tablica) + 1);

  // zapisanie w ostatnim elemencie tablicy tablica wartości hEdit
  tablica[Length(tablica) - 1] := hEdit;
end;
0

1 GB pamięci ? 100HWND = 10032B = 3200B = 3,125 KB - trochę daleko od gigabajta.

0

Mimo wszystko.. tablice z góry deklarowane na wartość "na pewno" większą niż maksymalna jaką oczekujemy to głupota...

0

Litości, ludzie, czepiacie się szczegółów. Chciałem żeby było prościej i obrazowo, a liczba 100 jest przypadkowa. Tymbardziej że w pytaniu było "co zrobić żeby nie wyskakiwał błąd". No ale fakt że lepiej dynamicznie to robić.

0
 // zapisanie w ostatnim elemencie tablicy tablica wartości hEdit
  tablica[Length(tablica) - 1] := hEdit;
end;

Jak już sie tak bawimy w elegancję, to lepiej

tablica[High(tablica)]:=hEdit;
0

A jeśli bawimy sie w nieuzywanie jakichkolwiek funkcji to:

tab[cardinal(pointer(cardinal(tab)-4)^)-1]

samo :

cardinal(pointer(cardinal(tab)-4)^)

jest rownowazne z length(tab)

// ale tylko dla tablic dynamicznych lub ansi/widestringów

//flabra nie strasz młodzieży :-) pq

// No co? Przeciez to normalne elementy języka :> I podstawowa powinność programisty: poznać budowe struktur danych :d

0

Wcześniej nie używałem ich ;) teraz będę wiedział na przyszłość.. :>

1 użytkowników online, w tym zalogowanych: 0, gości: 1