我在实验室中得到了这段示例代码,我正在尝试理解它
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/