具有 malloc 函数的数组大小



我正在学习C编程,这是我的第一门编程课程。我在这段代码中遇到了一些问题:

int* intArray;
intArray=(int*)malloc(5*sizeof(int));

我相信数组中的元素数量是 5 个整数。但是,我不太了解的是malloc函数。在这种情况下,它是否为 5 个整数的地址分配了足够的内存?

Malloc 返回指向已分配空间的 void 指针,如果可用内存不足,则返回 NULL。参数是要分配的大小(以字节为单位(。因此,在第intArray = (int*)malloc(5*sizeof(int));行中,您请求分配足够 5 个整数的内存(sizeof(int)给出了 int 类型的大小(。(马洛克(

使用 malloc 请求分配足以容纳 5 个新整数的内存。

不,malloc为 5 个整数分配足够的内存。它分配传递给函数的内容:5*sizeof(int) 。 可能让您感到困惑的是,intArray 是在堆栈上分配的指针,它指向错误分配内存开头的内存地址。

如果你想要 5 个整数的地址的内存,你可以执行以下操作:

int** intArray;
intArray=(int**)malloc(5*sizeof(int*));
<</div> div class="one_answers">

malloc 函数分配您在参数中请求的字节数,并返回块开头的内存中的地址。 在本例中,您请求了一个足够大的内存块来容纳 5 个整数值。

将其强制转换为int *以便编译器在索引和取消引用时将地址处理为包含整数。

观察到的

Malloc 函数调用需要一个指定字节数的值。来自 malloc 的文档:

空*马洛克(size_t大小(;

分配内存块。分配大小字节的内存块,返回指向块开头的指针

新分配的内存块的内容未初始化,保留不确定的值。

因此,在您的代码片段中:

intArray=(int*)malloc(5*sizeof(int));

int size 为 2 字节。sizeof(int( 返回 2。因此 5 * sizeof(int( = 10。因此,代码解析为 intArray = (int*(malloc(10(;

相关内容

  • 没有找到相关文章

最新更新