因为平台对代码中逗号处理的原因,所以里面很多部分代码估计有问题,建议用空格代替(隔开些)
首先,申请内存空间的处理不够标准,
一般是
// 下面是申请20个unsigned char 空间的标准方法,这样可以适应不同的平台环境,无论是多少位的系统
unsigned char *p = (unsigned char *)malloc( 20 * sizeof(ungigned char) );
此外关于你的free问题是因为p1=p,这里是值赋值,注意,这里的值是特殊的地址值,而不是里面的内容
free只是一个标志处理过程,表示这个地址对应的内存已经回收,可以用作它处,具体什么时候使用,则是由操作系统和应用程序一起根据需要决定(可能没有需要则还没有被其他程序占用,还会保留原来的信息),而且已经free的内存,理论上不应该去访问,因为这部分内容已经不受控制,很容易出现问题啦。
所以你的程序处理可能看不到free的效果。
这也是c程序指针问题麻烦之处,需要合理的管理所用指针相关操作,稍有不慎,就可能让程序崩溃。