了解malloc

我在实验室获得了这段示例代码,并试图理解它

int size = 5;
int **ppi2 = (int **) malloc(size * sizeof(int *));

以下是截至目前的情况:

为了分配足够的内存,我们必须将我们想要为(size)分配内存的东西的数量乘以这些东西的大小(sizeof(int *))。 这很简单,很有意义。

我知道我们必须将malloc的结果转换为双指针,因为malloc返回字节并且变量是双指针,但为什么我们首先将ppi2设置为等于malloc的结果? 它是否会使ppi2指向我们刚刚分配的内存中的位置?


通过malloc,你可以将你想分配的内存字节数作为参数传递给它,并将地址返回到你刚刚分配的内存的开始处。 将该地址存储在一个指针中,然后可以执行必要的操作。 它不会返回内存的字节,它会返回地址,然后您可以继续操作它们。 这就是C内存管理很重要的原因(你不知何故失去了这个地址,你“失去了”内存)。

如果你想更好地理解malloc如何处理内存及其与你的程序的关系(我推荐它的基本知识),请阅读Three Easy Pieces操作系统手册的第13章。 它很短,很棒。


我明白,我们必须将malloc的结果转换为双指针,因为malloc返回字节并且变量是双指针...

不要malloc的返回值。

为什么我们首先将ppi2设置为等于malloc的结果?

指向由malloc指针返回的相同位置。

它是否会使ppi2指向我们刚刚分配的内存中的位置?

是。


我知道我们必须将malloc的结果转换为双指针,因为malloc返回字节,而变量是双指针,

malloc不返回字节; 它返回一个指向它分配的字节的指针。 这个指针有一个泛型指针类型void * 。 在C ++中,您必须将此void *回变量的指针类型,但在普通C中,此转换是可选的。

但为什么我们首先将ppi2设置为等于malloc的结果? 它是否会使ppi2指向我们刚刚分配的内存中的位置?

是。

链接地址: http://www.djcxy.com/p/28461.html

上一篇: Understanding malloc

下一篇: Casting as Struct Pointer + Malloc