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)

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

相关文章
|
5月前
|
程序员 编译器 C语言
C语言动态内存管理函数(malloc、free、calloc、realloc)
开辟内存空间的⽅式有两个缺点: • 空间开辟⼤⼩固定 • 数组声明时,必须指定数组的⻓度,长度⼀旦确定了便不能调整 而实际情况是,很多时候我们所需要的空间⼤⼩只有在程序运⾏后才能知道,为此C语⾔引⼊了动态内存开辟这个概念,让程序员⾃⼰可以申请和释放内存空间,这样就显得比较灵活了。
|
10月前
|
编译器 C语言
【C语言】动态内存分配malloc,realloc等函数使用和常见错误(上)
【C语言】动态内存分配malloc,realloc等函数使用和常见错误(上)
56 0
|
5月前
|
C语言 C++
C++的new / delete 与 C语言的malloc/realloc/calloc / free 的讲解
C++的new / delete 与 C语言的malloc/realloc/calloc / free 的讲解
|
6月前
|
存储 编译器
calloc、malloc、realloc函数的区别及用法
calloc、malloc、realloc函数的区别及用法
43 0
|
7月前
|
编译器 C语言
C语言——动态内存函数(malloc、calloc、realloc、free)
C语言——动态内存函数(malloc、calloc、realloc、free)
|
10月前
|
C语言
【C语言】动态内存分配malloc,realloc等函数使用和常见错误(下)
【C语言】动态内存分配malloc,realloc等函数使用和常见错误(下)
87 0
|
10月前
|
C语言
【C语言】解析动态内存分配函数——malloc()函数、calloc()函数、realloc()函数
【C语言】解析动态内存分配函数——malloc()函数、calloc()函数、realloc()函数
|
11月前
|
存储 编译器 C++
C++ 中 malloc 和 new 的区别
C++ 中 malloc 和 new 的区别
73 0
|
11月前
|
存储 安全
有什么区别 new 和 malloc() ?
有什么区别 new 和 malloc() ?