EXC_I386_GPFLT pasti mengacu pada "Kesalahan Perlindungan Umum", yang merupakan cara x86 untuk memberi tahu Anda bahwa "Anda melakukan sesuatu yang tidak diizinkan untuk Anda lakukan". Biasanya ini TIDAK berarti Anda mengakses di luar batas memori, tetapi bisa jadi kode Anda keluar batas dan menyebabkan kode / data yang buruk digunakan dengan cara yang membuat semacam pelanggaran perlindungan.
Sayangnya sulit untuk mengetahui dengan tepat apa masalahnya tanpa konteks lebih lanjut, ada 27 penyebab berbeda yang tercantum dalam Manual Programmer AMD64 saya, Vol 2 dari tahun 2005 - dari semua akun, kemungkinan 8 tahun kemudian akan menambahkan beberapa lebih.
Jika ini adalah sistem 64-bit, skenario yang masuk akal adalah bahwa kode Anda menggunakan "penunjuk non-kanonik" - yang berarti bahwa alamat 64-bit dibentuk sedemikian rupa sehingga 16 bit atas dari alamat tersebut tidak semua salinan dari atas 48 bit bawah (dengan kata lain, 16 bit teratas dari sebuah alamat harus semuanya 0 atau semua 1, berdasarkan bit tepat di bawah 16 bit). Aturan ini diterapkan untuk menjamin bahwa arsitektur dapat "dengan aman memperluas jumlah bit yang valid dalam rentang alamat". Ini akan menunjukkan bahwa kode tersebut menimpa beberapa data penunjuk dengan barang lain, atau keluar batas saat membaca beberapa nilai penunjuk.
Kemungkinan penyebab lainnya adalah akses yang tidak selaras dengan register SSE - dengan kata lain, membaca register SSE 16-byte dari alamat yang tidak selaras 16-byte.
Ada, seperti yang saya katakan, banyak kemungkinan alasan lainnya, tetapi kebanyakan dari itu melibatkan hal-hal yang kode "normal" tidak akan lakukan dalam OS 32 atau 64-bit (seperti memuat register segmen dengan indeks pemilih yang tidak valid atau menulis ke MSR (model register khusus)).