一般free与malloc是配套使用的,它们操作的空间是堆
int *p,a=5;
p=&a;
free(p);
------------这样使用是不正确的,那些变量不是malloc那一族函数申请出来的,它们要么存储在数据段(全局变量和静态变量),要么存储在栈上(局部变量),使用free会使程序崩溃的,栈上的变量不用我们自己释放,当函数返回时,它们会被自动释放(是相当于,实际上是被弹栈了),数据段上的也不用我们管。
像int *p这个变量存储在数据段或栈上,无论它是什么类型的,它只占用四个字节,而p=malloc(size)指向的空间是在堆上的,free(p)可以用,p本身就不用我们管了;
在使用多级指针时,才有可能需要我们释放指针自己的空间,并且也是在用到了malloc那一族函数时才会需要:
int **p=malloc(sizeof(int)*10)... p[i] = malloc(size);在使用完后,要先释放p[i]指向的空间(free(p[i])),再释放p指向的空间 free(p);p本身仍然不用我们管。
表达不是很清楚,你可以找找这方面的资料来看看