这取决于。您的问题没有提供足够的信息。如果p++导致p引用也由分配的malloc()块,则该块将返回到堆(无论分配了什么大小)。但是,如果它不是指向动态分配的块的指针,则将破坏堆,结果是不确定的,但永远不会好!因此,例如,如果您要这样做:struct sBlock* p = malloc( 20 * sizeof(struct sBlock) ) ;p++ ; // point to second blockfree( p ) ; // Heap corruption or runtime error不需要C运行时来捕获此类错误,但是某些实现或调试环境可能会这样做。通常,在破坏了堆用来跟踪内存的结构之后,尝试分配或释放更多的内存之前,不会注意到该错误。实际的故障模式将是无法预测的,并且通常会在代码接近度和与实际错误的时间上发生一定距离,从而使调试变得困难。