C语言重新分配内存

示例

在为其分配了内存之后,可能需要扩大或缩小指针存储空间。该void *realloc(void *ptr, size_t size)函数释放由指向的旧对象,ptr并返回一个指向的对象的指针,该对象的大小由指定size。ptr是指向先前分配的内存块malloc,calloc或者realloc(或空指针)被重新分配。保留了原始内存的最大可能内容。如果新大小更大,则旧大小以外的任何其他内存都不会被初始化。如果新尺寸较短,则缩小部分的内容将丢失。如果ptr为NULL,则分配一个新块,并由函数返回指向它的指针。

#include <stdio.h>

#include <stdlib.h>

 

int main(void)

{

    int *p = malloc(10 * sizeof *p);

    if (NULL == p) 

    {

        perror("malloc() failed");

        return EXIT_FAILURE;

    }

 

    p[0] = 42;

    p[9] = 15;

    /* Reallocate array to a larger size, storing the result into a

     * temporary pointer in case realloc() fails. */

    {

        int *temporary = realloc(p, 1000000 * sizeof *temporary);

        /* realloc() failed, the original allocation was not free'd yet. */

        if (NULL == temporary)

        {

            perror("realloc() failed");

            free(p); /* Clean up. */

            return EXIT_FAILURE;

        }      

        p = temporary;

    }

    /* From here on, array can be used with the new size it was 

     * realloc'ed to, until it is free'd. */

    /* The values of p[0] to p[9] are preserved, so this will print:

       42 15

    */

    printf("%d %d\n", p[0], p[9]);

    free(p);

    return EXIT_SUCCESS;

}

重新分配的对象可能与或没有相同的地址*p。因此,realloc如果调用成功,则捕获包含新地址的返回值很重要。

确保你的返回值分配realloc给temporary代替了原来的p。realloc如果发生任何故障,将返回null,这将覆盖指针。这将丢失您的数据并造成内存泄漏。

以上是 C语言重新分配内存 的全部内容, 来源链接: utcz.com/z/343149.html

回到顶部