回复 10楼 Kid_X
可是在 stat(p1);函数中,p1已经指向了一个没有在这个程序中分配的一块空间,那么free(p1)是什么意思呢,不是自己申请的空间也释放??
stat(p1)函数并没有改变p1的地址。形参p以传值的方式把p1变量拷贝了一份,函数执行完成后,你并没有把p1指向分配的那块内存,
在get_rand()那里p1++这句已经改变了p1的地址,所以你去释放改变的p1地址自然会出错。
如果你在display();后面想手工复位,添加一句,令p1 = p2,这个时候是复位了,但两次free会释放同一块内存。
这个时候只能有一句存在,要么释放p1,要么释放p2,然后令两个指针都指向NULL是通常推荐的方式。