free释放的是q指针所指向的由malloc所分配的内存单元,q指针本身是不会释放的,所以之后可以将q指针重新指向新的内存地址,即指针r指向的位置;这里是因为外层有循环,所以需要将q指针移动到它的下一个元素,以便继续迭代执行。
逻辑上程序是错的,实际上可能是对的free只是告诉系统,这块我不要了,但在内存分配给其它之前它都是存在的 当你的系统内存极具匮乏的时候,这段程序就会出错