c - 了解malloc

标签 c pointers malloc

我在实验室中得到了这段示例代码,我正在尝试理解它

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

这是我目前的 segmentation :

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

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

最佳答案

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

如果您想更好地了解 malloc 如何使用内存及其与程序的关系(我推荐它,因为它是基础知识),请阅读 Chapter 13 Three Easy Pieces的操作系统书。很短,很棒。

关于c - 了解malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21787300/

相关文章:

c - 理解 C 中的 gets() 函数

c++ - 从另一个进程中查找变量的地址

带有结构体和二维数组的 C 指针

c++ - 打印 C++ int 指针与 char 指针

c++ - 删除函数的奇怪行为(混合 C 和 C++)

c - strlen 和释放内存

c - Arduino Due Sam3X8E 访问定时器值

c - pthread 启动例程返回一个整数数组

如果其指针已更改类型,是否可以释放内存?

c - 考虑极端情况如何进行定点乘法