problem z tablicami

DM
  • Rejestracja:prawie 21 lat
  • Ostatnio:prawie 19 lat
  • Postów:176
0

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

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

programowanie to sztuka bardzo życiowa... Wciąż trzeba kombinować..
pq
  • Rejestracja:około 23 lata
  • Ostatnio:około 14 lat
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


"Ecie pecie - odparłem. - Wiadomo, że wszystkiemu winien komputer. Ten brzydal!" (Lem)
endrique
  • Rejestracja:około 21 lat
  • Ostatnio:około 4 lata
  • Lokalizacja:Kraków
0

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

berl
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 10 lat
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!!


Słowa kierownika : To, jak wy zdążycie to napisać, to ja mam w szeroko rozumianej du*ie.
http://project1.pl
jack
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 2 lata
  • Lokalizacja:Sosnowiec
  • Postów:390
0

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

Kopiuj
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.

Deti
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
0

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


endrique
  • Rejestracja:około 21 lat
  • Ostatnio:około 4 lata
  • Lokalizacja:Kraków
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ć.

pq
  • Rejestracja:około 23 lata
  • Ostatnio:około 14 lat
0
Kopiuj
 // zapisanie w ostatnim elemencie tablicy tablica wartości hEdit
  tablica[Length(tablica) - 1] := hEdit;
end;

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

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

"Ecie pecie - odparłem. - Wiadomo, że wszystkiemu winien komputer. Ten brzydal!" (Lem)
flabra
  • Rejestracja:ponad 21 lat
  • Ostatnio:ponad 12 lat
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


Linuksa, czy innego Uniksa, można opisać za pomocą logiki boolowskiej a nie za pomocą prawdopodobieństwa. 'System szesnastkowy jest wspaniały! W skali od 1 do 10 daję mu E' extreme safety for Ubuntu:
sudo echo -e 'Defaults targetpw\nDefaults timestamp_timeout=0' >> /etc/sudoers
DM
  • Rejestracja:prawie 21 lat
  • Ostatnio:prawie 19 lat
  • Postów:176
0

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


programowanie to sztuka bardzo życiowa... Wciąż trzeba kombinować..

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.