【问题标题】:Size of array with malloc function具有 malloc 函数的数组大小
【发布时间】:2018-01-23 03:41:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: arrays pointers malloc


    【解决方案1】:

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

    使用 malloc 请求分配足够用于 5 个新整数的内存。

    【讨论】:

    • 所以它为数组分配了10字节的内存:intArray?
    • @MatteoCiccozzi int 的大小因编译器而异。如果sizeof(int) 是 2 个字节,那么是的,它会分配 10 个字节并返回一个指向分配空间的指针。
    • 所以基本上当我使用 malloc 时,它会将我希望分配的内存量作为输入,返回的是分配内存的地址?
    • @MatteoCiccozzi 差不多就是这样。请记住,return 是指向已分配内存块开始的指针。
    【解决方案2】:

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

    如果你想存储 5 个整数的地址,你可以这样做:

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

    【讨论】:

      【解决方案3】:

      malloc 函数分配您在参数中请求的字节数,并返回块开头的内存地址。在这种情况下,您请求的内存块足够大,可以容纳 5 个整数值。

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

      【讨论】:

        【解决方案4】:

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

        void* malloc (size_t 大小);

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

        新分配的内存块的内容没有初始化,剩余的值不确定。

        因此,在您的代码 sn-p 中:

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

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

        【讨论】:

          猜你喜欢
          • 2016-05-07
          • 2011-06-26
          • 2021-05-05
          • 1970-01-01
          • 2014-09-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多