เมื่ออาทิตย์ที่แล้ว ในขณะที่นั่งเขียนโปรแกรมอยุ่เพลิน อยุ่ๆ Terminal ก็ขึ้นว่า Bus Error (core dumped)
(ชิกหายแล้วกรู) นั่งหาอยู่พักใหญ่ก็พบ ว่า ปัญหาที่เกิด มาจาก การ cast ค่าจาก Memory Index ที่เป็น เลขคี่ ผมเลยลองเขียน code ตัวอย่าง ขึ้นมา อธิบายดู ตามนี้ครับ
#include <stdio.h>
#define U8 unsigned char
int main()
{
short sh_1_data;
short sh_2_data;
short *sh_1_ptr;
short *sh_2_ptr;
U8 arr_data[10];
int i;
for(i = 0; i < 10; i++)
{
arr_data[i] = 1;
}
sh_1_ptr = (short *)&arr_data[2];
printf(“before cast sh_data_1 from array index 2[memory index %u]\r\n”,(int)&arr_data[2]);
sh_1_data = *sh_1_ptr;
printf("after cast sh_1_data = %d from memory index %u\r\n\r\n",sh_1_data,(int)sh_1_ptr);
sh_2_ptr = (short *)&arr_data[3];
printf("before cast sh_data_2 from array index 3[memory index %u]\r\n",(int)&arr_data[3]);
sh_2_data = *sh_2_ptr;
printf("after cast sh_2_data = %d from memory index %u\r\n",sh_2_data,(int)sh_2_ptr);
}

จาก code และผลจาก run จะได้ว่า ถ้าหาก เราจะ cast ค่าจาก memory ที่เป็น เลขคี่ โปรแกรมจะขึ้น bus error ทันที
ปัญหานี้ผลเจอกับ Solaris อย่างเดียวนะครับ ใน Ubuntu ลองแล้ว ไม่เป็นครับ