ฉันเจอปริศนา C ต่อไปนี้:
ถาม: เหตุใดโปรแกรมต่อไปนี้จึง segfault บน IA-64 แต่ทำงานได้ดีบน IA-32
int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}
ฉันรู้ว่าขนาดของint
บนเครื่อง 64 บิตอาจไม่เหมือนกับขนาดของตัวชี้ ( int
อาจเป็น 32 บิตและตัวชี้อาจเป็น 64 บิต) แต่ฉันไม่แน่ใจว่าสิ่งนี้เกี่ยวข้องกับโปรแกรมข้างต้นอย่างไร ความคิดใด ๆ ?
#include stdlib.h
(สำหรับ malloc)
#include <stdlib.h>
การค้นหาที่สมบูรณ์แบบ แต่นั่นไม่ได้อยู่ในคำถาม
sizeof(int) == sizeof(int*)
ตัวอย่างเช่นหากพอยน์เตอร์ถูกส่งคืนแม้ว่าจะมีการลงทะเบียนอื่นไปยังint
s ในรูปแบบการโทรที่ใช้
malloc()
. GCC กล่าวว่าwarning: incompatible implicit declaration of built-in function 'malloc'
เช่นกัน
stdlib.h
ไม่รวม?