realloc的用法

简介: realloc的用法


一,我们来认识一下realloc函数、

void* realloc(void* ptr, size_t size)

  上面这个是realloc的函数原型,从中可以知道:

  1. void* pty : 这个是需要扩容的指针。
  2. size_t size : 重新分配的空间(单位为字节) 。
  3. 分配成功,返回void*指针(指向重新分配的字节数为size的内存块地址)
  4. 分配失败,返回NULL值。

二,realloc函数如何使用

1. 原地扩容 :

  这种情况出现在与原来指针指向的地址块后面的地址没有被分配,尚且空闲,于是realloc就直接在原来地址块后面直接扩容,分配新的空间。如下图:

2.异地扩容 :

  当原来指针指向的地址块后面的地址已经被分配,或者后面空闲地址的大小不够时,会在重新开辟新的地址,将原来地址块中的数据复制到新的地址中,然后会自动释放原来的地址空间。

如下图:

3.我们用代码示例出来:

//尾插法
void SLPushBack(SL* ps, SLDataType x) {
  //实现动态数组,容量就得实时监视,容量不够时扩容。
  if (ps->size == ps->capacity) {
    // 首先对容量进行判断,如果容量=0,那就初始化为4,否则就扩容为原来的二倍。
    int newCapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
    //void *realloc(void *ptr, size_t size); size_t size  : 重新分配的空间(单位为字节) ,pty : 需要扩容的指针。
    SLDataType* tmp = (SLDataType*)realloc(ps->a, newCapacity*sizeof(SLDataType)); 
    
    //分配成功返回重新分配的字节数为size的内存块地址
    // 分配失败返回 NULL。
    if (tmp == NULL) {
      printf("realloc fail \n");
      exit(-1);
    }
  }
  ps->a[ps->size] = x; // x 是要插入的数据 。
  ps->size++; // size就是数据的数量,所以跟随尾插的次数而变化。
}

这是用C语言写的对顺序表的尾插法,代码中有解释,在这里不做过多阐述。

4.关于缩容

  realloc(ps -> a, 0);//将内存大小置为0,同时自动释放原来的内存。也就是realloc(ps -> a, 0)等效于free(ps)

  新人创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看。

相关文章
|
编译器 程序员 测试技术
详解动态内存管理【malloc/calloc/realloc/free函数/柔性数组】【C语言/进阶/数据结构基础】
详解动态内存管理【malloc/calloc/realloc/free函数/柔性数组】【C语言/进阶/数据结构基础】
212 0
|
8月前
|
程序员 编译器 C语言
C语言动态内存管理函数(malloc、free、calloc、realloc)
开辟内存空间的⽅式有两个缺点: • 空间开辟⼤⼩固定 • 数组声明时,必须指定数组的⻓度,长度⼀旦确定了便不能调整 而实际情况是,很多时候我们所需要的空间⼤⼩只有在程序运⾏后才能知道,为此C语⾔引⼊了动态内存开辟这个概念,让程序员⾃⼰可以申请和释放内存空间,这样就显得比较灵活了。
|
7月前
|
存储 C语言
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
C语言学习记录——动态内存函数介绍(malloc、free、calloc、realloc)
510 1
|
7月前
|
C语言
【C语言】:动态内存管理函数malloc,calloc,realloc和free的介绍的介绍
【C语言】:动态内存管理函数malloc,calloc,realloc和free的介绍的介绍
79 0
|
7月前
|
程序员 C语言
C语言内存管理:malloc、calloc、realloc与free函数详解
C语言内存管理:malloc、calloc、realloc与free函数详解
226 0
|
8月前
|
存储 安全 编译器
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
94 0
【C语言】动态内存管理 -- -- 深入了解malloc、calloc、realloc、free、柔性数组(万字深入了解)
|
8月前
|
程序员 编译器 C语言
C语言----动态内存分配(malloc calloc relloc free)超全知识点
C语言----动态内存分配(malloc calloc relloc free)超全知识点
485 6
|
7月前
|
C语言
malloc()函数
`malloc()`是C语言中的动态内存分配函数,用于分配指定大小的内存块,并返回一个`void*`类型的指针。要包含`stdlib.h`头文件来使用它。分配的内存大小以字节为单位,成功则返回内存首地址,失败则返回`NULL`。需要注意的是,返回的指针需强制转换为所需类型,并在使用后用`free()`释放内存,避免内存泄漏。切勿在分配区域内移动指针,以防止释放时出现问题。
|
8月前
|
程序员 编译器 C语言
【C语言】动态内存管理(malloc,free,calloc,realloc)-- 详解
【C语言】动态内存管理(malloc,free,calloc,realloc)-- 详解