C 语言中 realloc 函数的用法?

推荐答案

-- -------------------- ---- -------
-------- ---------
-------- ----------

--- ------ -
    --- -----
    --- ------------ - --

    -- ------
    --- - ---- --------------------- - -------------
    -- ---- -- ----- -
        -------------------
        ------ --
    -

    -- -----
    --- ---- - - -- - - ------------- ---- -
        ------ - - - --
    -

    -- ----
    --- -------- - ---
    --- - ---- -------------- -------- - -------------
    -- ---- -- ----- -
        ---------------------
        ------ --
    -

    -- --------
    --- ---- - - ------------- - - --------- ---- -
        ------ - - - --
    -

    -- ----
    --- ---- - - -- - - --------- ---- -
        ---------- -- --------
    -
    -------------

    -- ----
    ----------

    ------ --
-

本题详细解读

realloc 函数的基本用法

realloc 函数用于重新分配内存块的大小。它的原型如下:

  • ptr 是指向之前分配的内存块的指针。如果 ptrNULLrealloc 的行为与 malloc 相同,即分配一个新的内存块。
  • size 是新的内存块的大小,以字节为单位。如果 size 为 0,realloc 会释放 ptr 指向的内存块,并返回 NULL

realloc 的工作原理

  1. 扩展内存:如果 realloc 能够扩展当前内存块的大小,它会直接扩展并返回原来的指针。
  2. 重新分配内存:如果当前内存块无法扩展,realloc 会分配一个新的内存块,将旧内存块中的数据复制到新内存块中,然后释放旧内存块,并返回新内存块的指针。
  3. 释放内存:如果 size 为 0,realloc 会释放 ptr 指向的内存块,并返回 NULL

注意事项

  • 内存泄漏:如果 realloc 失败并返回 NULL,原来的内存块不会被释放。因此,在使用 realloc 时,应该先将返回值赋给一个临时指针,检查是否为 NULL,然后再更新原指针。
  • 数据丢失:如果 realloc 需要重新分配内存块,旧内存块中的数据会被复制到新内存块中。如果复制过程中发生错误,可能会导致数据丢失。

示例代码解析

在示例代码中,我们首先使用 malloc 分配了一个大小为 5 的整数数组。然后使用 realloc 将数组大小扩展到 10。最后,我们初始化并打印数组的内容,并释放内存。

通过这个示例,你可以看到 realloc 如何在不丢失原有数据的情况下扩展内存块的大小。

纠错
反馈