arradyscode

http://www.arradyscode.com

Welcome to arradyscode.
Share algorithms, logic and codes of programming languages.

Access Violation Pada Delphi dan Lazarus

Dalam pemrograman, error atau kesalahan bukanlah hal yang asing, mulai dari kesalahan sederhana sampai yang komplit. Kesalahan-kesalahan ini sendiri beragam, ada kesalahan pada penulisan (syntax error) ada juga kesalahan pada logika (logic error).
Kesalahan yang disebabkan salah penulisan biasanya akan lebih mudah diketahui dikarenakan adanya pesan kesalahan oleh compiler secara terperinci. Tetapi kesalahan logika hanya dapat diperbaiki dengan logika pula, dengan mengubah pandangan dalam berpikir, menganalisa dan mencoba dengan logika baru.
Perlu digarisbawahi bahwa programming bukanlah ilmu menebak, setiap tindakan melalui proses analisa yang sangat indah tersusun dalam bentuk algoritma. 
Salah satu kesalahan logika yang sering dijumpai dalam pemrograman khususnya Delphi dan Lazarus adalah Access Violation, hal ini dikarenakan sebuah object diakses pada saat object tersebut belum tersedia. Sebagai contoh, pemanggilan form secara defaultnya adalah cukup dengan code ini.
procedure TForm1.Button1Click(Sender: TObject);
begin
  form2.show;
end;
Tetapi bagaimana jika form2 adalah available form, yang artinya form2 tidak di create otomatis oleh Delphi atau Lazarus, tentunya form2 harus di create terlebih dahulu secara runtime sehingga menjadi:
procedure TForm1.Button1Click(Sender: TObject);
begin
  form2 := TForm2.create(self);
  form2.show;
end;
Pada script di atas terlihat jelas bahwa form2 di create terlebih dahulu sebelum dipanggil, sehingga pada saat diakses form2 tersebut sudah tersedia. Hal ini tentunya akan menghindarkan dari access violation.
Begitu juga halnya pada saat akan membebaskan memory, pastikan object tersebut tersedia untuk di free kan. Dalam hal tertentu Anda dapat menggunakan assigned() untuk melakukan pengecekan apakah object tersebut tersedia sebelum diakses.
procedure TForm1.Button1Click(Sender: TObject);
begin
  { cek ketersediaan object sebelum diakses }
  if assigned(form2) then
    form2.show;

  { jika tidak ada create }
  if not assigned(form2) then
    form2.create(self);

  { cek sebelum dibebaskan}
  if assigned(form2) then
    form2.free;
end;
Perlu digarisbawahi bahwa procedure yang saya tulis di atas hanya contoh akses object yang menyebabkan access violation. Anda dapat menjadikan ini sebagai acuan Anda dalam mendebug kesalahan pada aplikasi Anda.
Jika Anda mempunyai penyebab-penyebab lain pada access violation, silahkan beri komentar dibawah, semoga dapat menjadi referensi pembaca.

Terbaru di blog ini:

Mungkin Anda juga ingin membaca:

Berkomentarlah sesuai topik.

1 komentar:

avatar

Wah sangat bermanfaat sob infonya :)

Gunakan kode berikut untuk menambahkan emoticon ke komentar:
:)
:(
=(
^_^
:D
=D
|o|
@@,
;)
:-bd
:-d
:P
:ngakak:

Untuk menuliskan Syntax: [code] code disini [/code]

Untuk menuliskan Quote: [quote] quote disini [/quote]

Berkomentarlah sesuai topik