ฉันเจอปริศนา 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*)ตัวอย่างเช่นหากพอยน์เตอร์ถูกส่งคืนแม้ว่าจะมีการลงทะเบียนอื่นไปยังints ในรูปแบบการโทรที่ใช้
malloc(). GCC กล่าวว่าwarning: incompatible implicit declaration of built-in function 'malloc'เช่นกัน
stdlib.hไม่รวม?