2016-08-22 104 views
3

感谢您的注意我的问题。使用malloc()和免费()

在C底漆此外,它首先写入

free()的参数应该是一个指针,指向由malloc()分配的存储器的块;你不能用free()被其他分配的内存意味着

这意味着ONE malloc(),ONE和ONLY一个free()

但后来它去

没关系使用不同的指针变量与free()malloc();必须同意的是存储在指针中的地址。

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

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

+0

指针“的说法给free()** **应该是一个......”是错误的。它**应**。而指针不是它指向**的对象! – Olaf

回答

13

例如:

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

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

“没关系比 的malloc()使用不同的指针变量有免费()”

实际上是毫无意义的,只是造成混乱 - 当然这是很好用不同只要值是相同的变量。

+0

谢谢,这本书好像有很多这样的多余描述 – Newb

2

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

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

什么事项free是让以前malloc给出一个指针的(即以前malloc给出一个内存地址)

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; 
+0

这带来了一些新的东西,thx。 – Newb