了解malloc

时间:2014-02-14 18:51:53

标签: c pointers malloc

我在实验室获得了这段代码示例,我正在努力理解它

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

以下是我截至目前的细分:

为了分配足够的内存,我们必须将我们想要为(大小)分配内存的事物的数量乘以那些事物的大小(sizeof(int *))。这很简单,很有道理。

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

3 个答案:

答案 0 :(得分:1)

使用malloc,您可以将要分配的内存字节数作为参数传递,并将地址返回到刚刚分配的内存的开头。将该地址存储在指针中,然后您可以使用它执行必要的操作。它不返回内存的字节,它返回地址,然后你可以去操作它们。这就是为什么C内存管理很重要的原因(你以某种方式失去了那个地址,你失去了#34;内存)。

如果您希望更好地了解malloc如何处理内存及其与您的程序的关系(我从其基本知识推荐),请阅读Chapter 13 Three Easy Pieces操作系统书。它很简短,很棒。

答案 1 :(得分:0)

  

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

Do not cast the return value of malloc

  

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

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

  

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

是。

答案 2 :(得分:0)

  

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

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

  

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