关于使用malloc()和free()的问题

时间:2016-08-22 13:15:10

标签: c memory malloc free

感谢您注意我的问题。

在C Primer Plus中,它首先写

  

free()的参数应该是指向malloc()分配的内存块的指针;您无法使用free()释放通过其他方式分配的内存

表示一个malloc(),一个一个free()

但后来它变成了

  

使用free()而不是malloc()的不同指针变量是可以的;必须同意的是存储在指针中的地址。

这似乎与第一个陈述相矛盾。

所以我的理解是,只要一对malloc()free()共享相同的地址就没有错误,指针的名称并不重要。我是对的吗?

3 个答案:

答案 0 :(得分:13)

例如:

void* p = malloc (100);
void* q = p;
free (q);

......很好。 free ()的参数是malloc返回的值。句子

  

“可以使用与free()不同的指针变量而不是   的malloc()“

实际上是没有意义的,只会产生混淆 - 当然只要值相同就可以使用不同的变量。

答案 1 :(得分:5)

请记住释放任何别名,使所有指针无效

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;

答案 2 :(得分:2)

变量包含一些值,可以是指针(即内存地址)。

两个变量可以包含相同的指针(即相同的地址),它被称为指针别名。

free重要的是获取先前由malloc给出的指针的(这是先前由malloc给出的内存地址)< / p>