首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解malloc

了解malloc
EN

Stack Overflow用户
提问于 2014-02-15 02:51:53
回答 3查看 2K关注 0票数 2

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

代码语言:javascript
复制
int size = 5;
int **ppi2 = (int **) malloc(size * sizeof(int *));

这是我到目前为止的分类:

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

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

EN

回答 3

Stack Overflow用户

发布于 2014-02-15 04:23:56

使用malloc时,您可以将想要分配的内存字节数作为参数传递,它会将地址返回到您刚刚分配的内存的开头。将该地址存储在指针中后,您就可以对它执行您必须执行的操作。它不返回内存的字节数,而是返回地址,这样你就可以去操作它们了。这就是为什么掌握C内存管理是很重要的(不知何故,你丢失了地址,你就“丢失”了内存)。

如果您想更好地理解malloc是如何使用内存的,以及它与您的程序的关系(因为它是基础知识,我建议您这样做),请阅读Chapter 13 of Three Easy Pieces operative一书。它很短,很棒。

票数 2
EN

Stack Overflow用户

发布于 2014-02-15 02:55:00

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

Do not cast the return value of malloc

为什么我们首先要将ppi2设置为等于

的结果?

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

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

是。

票数 0
EN

Stack Overflow用户

发布于 2014-02-15 02:55:46

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

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

但是为什么我们首先要将ppi2设置为等于

的结果呢?它会使ppi2指向我们刚刚分配的内存中的点吗?

是。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21787300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档