Эй, я пробовал этот код через gcc, и он остановился на:
*** glibc detected *** ./a.out: free(): invalid pointer: 0x0829600c ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(+0x6b591)[0x7be591]
/lib/tls/i686/cmov/libc.so.6(+0x6cde8)[0x7bfde8]
/lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0x7c2ecd]
Так что, согласно вашему первому ответу, вы не можете освободить следующую ячейку памяти.и для второго вопроса: и четыре байта не будут использоваться, если вы не сделаете p - и этот код будет работать нормально, если вы не измените содержимое следующей области памяти и не сможете использовать выделенную область памяти, выполнив p -