int *p = (int *)malloc(sizeof(int)*50);
for(i = 0; i < 5; i++)
for(i = -1; i < 5; i++)
printf(" %d ", *((int *)(p+i)));
This is undefined behavior. You're accessing memory that is outside the region that
malloc() returned and this is not valid.
If it was valid in some context, that was an implementation-specific extension and not something you can depend on or do in the general case.
Also, please don't cast the return value of
malloc() in C. The printing could just be:
printf(" %d ", p[i]);
the asterisk and cast that you added are not necessary, just use array indexing.