理论上,第二次的输出应该是一样的或者为0。
导致这个问题的原因,你要知道free的作用。
所谓内存分配,类似圈地,撒一泡尿后说这块地就是我的了,也就是标记。
所谓的内存释放,就是放弃,告诉大家,这个东西我现在不用了,大家可以随便使用了,就像公交的座位,你坐了是你的位置,你走了,座位就可以被别人坐了。
这里:座位可以被别人坐了,很关键。
当你把内存释放内存后,系统(内存管理系统)标记这块内存是可用的,此时,别的应用就可能使用这块内存。
如果释放后的内存没被使用,可能两种情况,值不变或为0,这个跟free的实现机制有关,具体难确定。但如果这块内存被别的应用使用后,其内容就被改变了,于是就有了你的结果。
你可以反复运行,第二次的输出可能是10或0,也可能是别的不确定的值。
释放内存后,原来的指针top(也就是地址变量)的内容是不会改变的,还是指向malloc分配的地址空间。你可以尝试输出地址看看。