Prototype

ลองนั่งทำ C PUZZLES ดู แล้วติดที่ข้อนี้ ที่ให้อธิบายว่าโค้ดข้างล่างนี้จะ Segmentation Fault เมื่อคอมไพล์บน IA-64 แต่ทำงานถูกต้องบน IA-32

int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}

ปัญหาคือดันไม่มี IA-64 ให้เล่นอีก เลยต้องนั่งหาในเน็ตดูว่ามีเฉลยกันมั่งรึเปล่า แล้วก็เจอไม่ยาก จาก debian-list

เรื่องของเรื่องคือเมื่อคอมไพล์เลอร์ไม่พบ Prototype ของฟังก์ชั่น มันจะคิดเอาเองว่าฟังก์ชั่นจะคืนค่าเป็น int 32 เสมอ ในกรณีนี้ทำให้ core dump ได้ไม่ยาก วิธีแก้ก็ไม่มีอะไรเลย แค่ include ไฟล์ stdlib.h เข้าไปก็จะไม่มีปัญหาแล้ว

เขียน C มาเป็นปีๆ เรื่องพวกนี้ หลายๆ ครั้งก็แค่ตาม Best Practice ไปโดยไม่เข้าใจแฮะว่าทำไมต้อง include ให้ครบๆ

 

วันนี้

ช – [เดินออกจากร้าน]

ญ – ขอบคุณนะคะ

ช – ครับ

ญ – เดี๋ยวค่ะ

ช – ครับ?

ญ – ถุงอะไรอ่ะค่ะ (มือชี้)

ช – ถุงร้าน ….. น่ะครับ

ญ – สวยดีนะคะ

ช – ครับ สวยดี (ไม่ได้คิดถึงถุง…)

ปล. งานนี้ถ่ายทำจากสถานที่จริง