Skip to main content

NULL Pointer

Hari ini sebenarnya aku agak bingung mau ngerjain apa. Kepikiran sih untuk ngecek TA-nya Elen, tapi ternyata source code yang dia kasih belum ada, jadi aku cuma terima dokument TA dia. Paling-paling aku rencana ikutan mempelajari DVD Player, terus ngerjain user guide untuk D'LaGate.

Eh, pas Dillah ngetest D'LaGate lagi, ketemu masalah. Kalau ada pesan yang numpuk di HP, tidak terproses dengan benar. Malahan sms itu udah ditandai dibaca, tapi nggak kehapus .. wah, kenapa ya?

Akhirnya aku ingat dulu Pak Iwan pernah melemparkan kasus ini. Jadi saat Comm membaca SMS masuk, yang dibaca adalah semua SMS, bukan satu-per-satu, jadi perlu di parsing. Wah kayaknya ini dia penyebabnya. Kerjaan lagi buatku .... he he he ... :(

Akhirnya ketemu juga problemnya. Setelah di-debug, (dan menghabiskan banyak SMS -- untunnya Dillah pakai SMS gratisan dari IM3), akhirnya ketemu juga masalah yang membuat D'La Gate nge-hung ketika baca banyak SMS diterima.

Penyebabnya adalah pengisian nilai '\0' ke sebuah pointer, tanpa memeriksa isi dari pointer itu. Jadi sebelumnya ada perintah

tmp1 = strstr(tmp2, "\n"); // mencari simbol ENTER
*tmp1='\0'; //simbol yang ditemukan diganti dengan NULL


Nah, kalau SMS cuma satu, proses ini gak ada masalah, tapi waktu ngambil beberapa SMS yang belum dibaca, terjadi error karena tmp1 hasilnya NULL. Jadi harus ditambahin pengecekan apakah NULL atau nggak.

if (tmp1 != NULL) {
*tmp1='\0';
}


Hmm ... belajar satu hal lagi. Siiip!

Comments

Popular posts from this blog

PostGreSQL :: Hitung Umur

Ternyata untuk menghitung umur dari data yang disimpan di PostGreSQL sangat gampang. PostGreSQL sendiri sudah menyediakan fungsi yang mendukung. Beberapa fungsi yang bisa dipakai adalah AGE dan EXTRACT. AGE dipakai untuk menghitung umur dari sebuah data, dibandingkan dengan hari ini, atau dengan data lain (tipenya timestamp). Misal: age(timestamp '1980-09-27'), akan menghasilkan nilai (bertipe interval) "24 years 1 mon 25 days". Nah, kalau mau mengambil nilai tahunnya saja, tinggal menggunakan EXTRACT Contoh: EXTRACT(year FROM AGE(timestamp '2001-09-27')), hasilnya akan jadi 24.

PHP :: Selisih Jam

Setelah kemarin kesulitan untuk melakukan increment ataupun decrement terhadap variabel waktu (date/time) di PHP, kali ini nemuin masalah untuk mencari selisih waktu (dari satu jam ke jam tertentu), yang perlu untuk ngitung lembur karyawan. Tadinya kepikiran untuk buat fungsi sendiri, yang flow -nya kira-kira begini: - masing-masing dipisah menjadi jam, menit, detik - bandingkan antara keduanya. - lakukan pengurangan terhadap masing-masing komponen (jam, menit dan detik) - gabungkan hasil perhitungan ... (selisih jam + selisih menit + selisih detik) Tapi waktu aku ingat kasus Next Date, ... muncul ide untuk menggunakan cara yang sama, yaitu memanfaatkan format UNIX timestamp, terus nyoba mencari selisihnya. TERNYATA BERHASIL !!! Flownya seperti ini: - masing-masing dipisah menjadi jam, menit,detik - ubah masing-masing ke format timestamp, gunakan fungsi mktime() - kurangkan kedua jam - hasilnya dibagi 60 (karena satuannya pakai menit), sementara selisih timestamp itu dalam detik Algori

Delphi :: Split String

Akhirnya ketemu juga cara untuk melakukan split string. (Terbiasa pakai PHP sih, yang sangat memanjakan dalam pengelolaan string.) Di sini memanfaatkan TStringList, unit Classes. // procedure untuk split string procedure Split (const Delimiter: Char; // delimiter charachter Input: string; // input string const Strings: TStrings) ; // list of string result begin Assert(Assigned(Strings)) ; Strings.Clear; Strings.Delimiter := Delimiter; Strings.DelimitedText := Input; end; // contoh pemakaian procedure TForm1.Button1Click(Sender: TObject) ; var A: TStringList; begin A := TStringList.Create; try Split(' ', 'your delphi guide', A) ; ShowMessage(a[0]) ; //your ShowMessage(a[1]) ; //delphi ShowMessage(a[2]) ; //guide finally A.Free; end; end; Source : http://delphi.about.com/cs/adptips2002/a/bltip1102_5.htm Wheew .. akhirnya. One step ahead!!