当前位置: C语言 -- 标准库 -- <stdlib.h> -- realloc

realloc函数


概要:
#include <stdlib.h>
void *realloc(void *ptr, size_t size);

描述:

该函数释放参数ptr指向的旧对象,并返回一个指向具有参数size指定大小的新对象的指针。如果新分配的内存不大于原先内存,新内存的内容与原先内存的内容相同;如果新分配的内存大于原先内存,超出部分的内容是不确定的。

如果参数ptr是空指针,realloc函数将像malloc函数一样分配指定大小的内存。如果参数ptr不能匹配先前内存管理函数返回的指针,或者如果参数ptr指向的内存已经被释放,函数行为是未定义的。

如果参数size是非0值,并且未给新对象分配内存,则不会释放旧对象的内存。如果参数size0,并且未给新对象分配内存,是否释放旧对象的内存将由实现定义。如果旧对象未被释放,其值应保持不变。


参数:
void *ptr

指向原先分配内存的指针。

size_t size

指定新分配内存大小的size_t类型整数。


返回值:

函数返回一个指向新对象的指针(它可能与指向旧对象的指针具有相同的值。);如果新对象的内存未能分配,函数返回一个空指针。


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
/*函数realloc范例*/

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char *str, *ptr;
    char temp;
    int size, i;

    puts("Input the size of the string.");
    scanf("%d%c", &size, &temp);

    /*分配内存。*/
    str = malloc(size);
    if(str==NULL)
        exit(EXIT_FAILURE);
        
    puts("Input the string.");
    /*向分配的内存中写入内容。*/
    for(i=0;i<(size-1);++i)
    {
        if((str[i]=getchar())=='\n')
            break;
    }
    str[i] = '\0';

    /*重新分配内存。*/
    ptr = realloc(str, (size+50));
    if(ptr==NULL)
        exit(EXIT_FAILURE);

    puts("Input new string.");
    /*在str内容后输入新内容。*/
    ptr[i++] = ' ';
    for(;i<(size+50-1);++i)
    {
        if((ptr[i]=getchar())=='\n')
            break;
    }
    ptr[i] = '\0';

    puts(ptr);

    /*释放内存。*/
    free(ptr);

    return 0;
}


结果:

假设输入为:

100

It is hard to fail, but it is worse never to have tried to succeed.

-Theodore Roosevelt

将输出:

It is hard to fail, but it is worse never to have tried to succeed. -Theodore Roosevelt


相关内容:
aligned_alloc 分配对齐方式和大小都指定的内存的函数。
free 释放内存的函数。
malloc 分配指定大小内存的函数。
calloc 给数组分配内存并将所有位都初始化为0的函数。