理解malloc

理解malloc,c,pointers,malloc,C,Pointers,Malloc,我在实验室里得到了这段示例代码,我正在努力理解它 int size = 5; int **ppi2 = (int **) malloc(size * sizeof(int *)); 以下是我截至目前为止的细分数据: 为了分配足够的内存,我们必须将要分配内存的对象的数量(size)乘以这些对象的大小(sizeof(int*))。这很简单,也很有道理 我知道我们必须将malloc的结果强制转换为双指针,因为malloc返回字节,变量是双指针,但是为什么我们首先要将ppi2设置为等于malloc的结

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

int size = 5;
int **ppi2 = (int **) malloc(size * sizeof(int *));
以下是我截至目前为止的细分数据:

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

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

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

为什么我们首先要将ppi2设置为malloc的结果

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

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

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

malloc不返回字节;它返回指向它分配的字节的指针。此指针具有通用指针类型
void*
。在C++中,必须将此代码>空> */COD>返回到变量的指针类型,但在C中,此转换是可选的。 但是为什么我们首先要将ppi2设置为malloc的结果?它是否使ppi2指向我们刚才分配的内存中的位置

是。

使用,您可以将要分配的内存字节数作为参数传递,并将地址返回到刚刚分配的内存的开头。有了存储在指针中的地址,您就可以用它做您必须做的事情。它不返回内存字节,而是返回地址,这样您就可以继续操作它们。这就是为什么掌握C内存管理很重要的原因(你不知何故丢失了地址,你就“丢失”了内存)


如果您想更好地了解
malloc
如何使用内存及其与程序的关系(我推荐使用它的基础知识),请阅读《操作系统》一书。它很短,非常棒。

首先,我是用C语言编程的,所以我想我应该把它转换成C++格式,但不是用C格式。只需在提供的链接中阅读接受的答案。我读错了,我错读了,并将其交换了。上面最好写为
int**ppi2=malloc(size*sizeof*ppi2)(和<代码>大小<代码>应该被称为“代码>计数>代码>”。在C++中,通常使用<代码>新< /COD>而不是<代码> MalOC/<代码>——或者,最好使用标准容器类之一。@ KethththoppsSoad贫分配器< /C> > S,没有人永远不会记住它们:D。内存分配/释放的“真实”C++方式。