您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言realloc()函数:重新分配内存空间

时间:12-30来源:作者:点击数:

头文件:#include <stdlib.h>

realloc() 函数用来重新分配内存空间,其原型为:
    void* realloc (void* ptr, size_t size);

【参数说明】ptr 为需要重新分配的内存空间指针,size 为新的内存空间的大小。

realloc() 对 ptr 指向的内存重新分配 size 大小的空间,size 可比原来的大或者小,还可以不变(如果你无聊的话)。当 malloc()calloc() 分配的内存空间不够用时,就可以用 realloc() 来调整已分配的内存。

如果 ptr 为 NULL,它的效果和 malloc() 相同,即分配 size 字节的内存空间。

如果 size 的值为 0,那么 ptr 指向的内存空间就会被释放,但是由于没有开辟新的内存空间,所以会返回空指针;类似于调用 free()

几点注意:

  • 指针 ptr 必须是在动态内存空间分配成功的指针,形如如下的指针是不可以的:int *i; int a[2];会导致运行时错误,可以简单的这样记忆:用 malloc()、calloc()、realloc() 分配成功的指针才能被 realloc() 函数接受。
  • 成功分配内存后 ptr 将被系统回收,一定不可再对 ptr 指针做任何操作,包括 free();相反的,可以对 realloc() 函数的返回值进行正常操作。
  • 如果是扩大内存操作会把 ptr 指向的内存中的数据复制到新地址(新地址也可能会和原地址相同,但依旧不能对原指针进行任何操作);如果是缩小内存操作,原始据会被复制并截取新长度。

【返回值】分配成功返回新的内存地址,可能与 ptr 相同,也可能不同;失败则返回 NULL。

注意:如果分配失败,ptr 指向的内存不会被释放,它的内容也不会改变,依然可以正常使用。

代码示例:

#include <stdio.h>
#include <stdlib.h>
int main ()
{
    int input,n;
    int count = 0;
    int* numbers = NULL;
    int* more_numbers = NULL;
    do {
        printf ("Enter an integer value (0 to end): ");
        scanf ("%d", &input);
        count++;
        more_numbers = (int*) realloc (numbers, count * sizeof(int));
        if (more_numbers!=NULL) {
            numbers=more_numbers;
            numbers[count-1]=input;
        }else {
            free (numbers);
            puts ("Error (re)allocating memory");
            exit (1);
        }
    } while(input!=0);
    printf ("Numbers entered: ");
    for (n=0;n<count;n++) printf("%d ",numbers[n]);
    free (numbers);
    system("pause");
    return 0;
}

运行结果:

Enter an integer value (0 to end): 23
Enter an integer value (0 to end): 45
Enter an integer value (0 to end): 23
Enter an integer value (0 to end): 67
Enter an integer value (0 to end): 0
Numbers entered: 23 45 23 67 0

上面的代码提示用户输入若干个数字(输入 0 结束)。每次输入新的数字,numbers 指向的内存空间就会增长 sizeof(int) 的长度。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门