Lemme first admit that i have never gone thru the documentaion.. have always referred books.. thats it...Request you to pls be patient with my questions

When i worked on my VC++ complier I found this:
int *p;
p= malloc(8);
No errors
int *p;
p= malloc(6);
Run-time error
Do I have to always use sizeof() with malloc? Cannot I allocate an integer array of 4 bytes with the following code assuming int on my system occupies 4 bytes?
int *p;

assume, p=0; then is p+1=4 ? or p+1= 1?
If p+1=4 then what is the difference between calloc and malloc except for 0-byte filling.

Hope my questions are not silly..