1. 主页
  2. 文档
  3. C语言教程
  4. C语言内存管理
  5. 使用 realloc()

使用 realloc()

可以使用 realloc() 更改动态分配的内存大小。

根据 C99 标准:

void *realloc(void *ptr, size_t size);

realloc 释放 ptr 指向的旧对象并返回一个指向具有 size 指定大小的新对象的指针。新对象的内容与释放前旧对象的内容相同,直至新旧大小中的较小者。新对象中超出旧对象大小的任何字节都具有不确定的值。

需要注意的一点是realloc() 应该只用于动态分配的内存。如果内存不是动态分配的,那么行为是未定义的。
例如,程序 1 演示了 realloc() 的不正确使用,程序 2 演示了 realloc() 的正确使用。

方案一:

#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[2], i;
int *ptr = arr;
int *ptr_new;

arr[0] = 10; 
arr[1] = 20; 

// incorrect use of new_ptr: undefined behaviour
ptr_new = (int *)realloc(ptr, sizeof(int)*3);
*(ptr_new + 2) = 30;

for(i = 0; i < 3; i++)
printf("%d ", *(ptr_new + i));

getchar();
return 0;
}

输出:
未定义的行为


方案二:

#include <stdio.h>
#include <stdlib.h>
int main()
{
int *ptr = (int *)malloc(sizeof(int)*2);
int i;
int *ptr_new;

*ptr = 10; 
*(ptr + 1) = 20;

ptr_new = (int *)realloc(ptr, sizeof(int)*3);
*(ptr_new + 2) = 30;
for(i = 0; i < 3; i++)
printf("%d ", *(ptr_new + i));

getchar();
return 0;
}

输出:
10 20 30

 

这篇文章对您有用吗?