内側のブロックでmallocで確保した領域っていうのはfreeしてなければ外側のブロックから使えるんですよね?

int main(void){
int a[10];
int i;
for(i = 0; i < 10; i++){
int *p;
p = (int *)malloc(sizeof(int));
*p = i;
a[i] = (int)p;
}

for(i = 0; i < 10; i++)
printf("%d ", *((int *)(a[i])));
return 0;
}

この時出力は0 1 2 3 4 5 6 7 8 9であることは間違いないんですよね?