הסיבה היא פשוטה מאוד, malloc מקבלת כפרמטר כמה bytes אתה מעוניין להקצאות.
מכיוון שאתה מעוניין לקבל מערך של x איברים מסוג integer, אתה לא יכול להקצאות רק x bytes.
קוד:
arr = malloc( x * sizeof( int ) );
אין צורך ב-cast ל-malloc אם אתה כותב ב-C.
_____________________________________
C pogrammers never die. They are just cast into void.