感谢您注意到我的问题。
在C Primer Plus中,它首先写入
free()
的参数应该是指向malloc()
分配的内存块的指针;你不能使用free()
来释放通过其他方式分配的内存
表示ONE malloc()
, ONE and ONLY ONE free()
。
但是后面又变成
在
free()
和malloc()
中使用不同的指针变量是可以的;必须一致的是指针中存储的地址。
似乎与第一个语句相矛盾。
所以我的理解是,只要一对malloc()
和free()
共享相同的地址就没有错误,指针的名称无关紧要。我说的对吗?
例如:
void* p = malloc (100);
void* q = p;
free (q);
…很好。free ()
的参数是malloc
返回的值。句子
" free()和with使用不同的指针变量是可以的malloc ()"
实际上毫无意义,只会造成混淆——当然,只要值相同,使用不同的变量是可以的。
请记住,释放别名会使所有指针无效
int *a, *b, *c, *d, *e;
a = malloc(42 * sizeof (int));
b = a;
c = b;
d = c;
e = d;
a[0] = 42;
b[1] = 100; // same as a[1]
c[2] = 999; // same as a[2]
d[3] = -1; // same as a[3]
e[4] = 0; // same as a[4]
free(d); // for example
// all of a, b, c, d, and e are now invalid;
变量包含一些值,可以是指针(即内存地址)。
两个变量可以包含相同的指针(即相同的地址),称为指针混叠。
对free
来说重要的是获得malloc
先前给出的指针的值(即malloc
先前给出的内存地址)