📅  最后修改于: 2023-12-03 14:47:02.306000             🧑  作者: Mango
在 C 编程语言中,realloc()
函数可以重新分配已经分配的内存大小,它是 $stdlib.h$
头文件中的一个函数。realloc()
函数需要两个参数:指向已分配内存的指针和新的内存大小。它返回一个指向新分配内存的指针。下面是函数签名:
void *realloc(void *ptr, size_t size);
其中 *ptr
参数是之前 malloc() 或 calloc() 函数分配内存时所返回的指针,而 size
参数是你期望这些内存块现在应该有多大。
如果 ptr
是 NULL
,那么 realloc() 就会分配一个新的内存块,就像 malloc() 函数一样。要注意,你必须检测这个指针的返回值是否为 NULL。如果分配失败了,realloc() 函数会返回 NULL 值。
如果 size
是0,那么realloc()函数将释放这个内存块。
如果 size
是在堆栈中分配的内存块的大小;则 realloc()
函数将会这些内存块扩大或缩小为 size
参数指定的大小。
下面是一些代码片段,演示了 realloc()
函数的用法:
#include <stdio.h>
#include <stdlib.h>
int main()
{
// 分配初始内存
int *ptr = (int*)malloc(5*sizeof(int));
// 打印初始内存
for (int i=0; i<5; i++)
printf("%d ", *(ptr+i));
// 重新分配内存
ptr = realloc(ptr, 15*sizeof(int));
// 分配新的内存块
for (int i=5; i<15; i++)
*(ptr+i) = i;
// 打印新的内存块
for (int i=0; i<15; i++)
printf("%d ", *(ptr+i));
free(ptr);
return 0;
}
当程序运行时,输出结果如下所示:
0 0 0 0 0
0 0 0 0 0 5 6 7 8 9 10 11 12 13 14
在此示例中,我们从开始分配了一个大小为5的整型数组。接着,我们通过 realloc()
函数来扩大内存块的大小,将它扩大到了15个整型数字。最后,我们将新分配的数组打印出来。
#include <stdio.h>
#include <stdlib.h>
int main()
{
// 分配初始内存
int *ptr = (int*)malloc(15*sizeof(int));
// 打印初始内存
for (int i=0; i<15; i++)
printf("%d ", *(ptr+i));
// 重新分配内存
ptr = realloc(ptr, 5*sizeof(int));
// 打印新的内存块
for (int i=0; i<5; i++)
printf("%d ", *(ptr+i));
free(ptr);
return 0;
}
当程序运行时,输出结果如下所示:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0
在此示例中,我们从开始分配了一个大小为15的整型数组。接着,我们通过 realloc()
函数来缩小内存块的大小,将它缩小到了5个整型数字。最后,我们将缩小内存块的结果打印出来。
#include <stdio.h>
#include <stdlib.h>
int main()
{
// 分配初始内存
int *ptr = (int*)malloc(5*sizeof(int));
// 打印初始内存
for (int i=0; i<5; i++)
printf("%d ", *(ptr+i));
// 重新分配内存
ptr = realloc(ptr, 100*sizeof(int));
if(ptr == NULL)
{
printf("\nCouldn't reallocate memory, exiting...");
exit(0);
}
// 分配新的内存块
for (int i=5; i<100; i++)
*(ptr+i) = i;
// 打印新的内存块
for (int i=0; i<100; i++)
printf("%d ", *(ptr+i));
free(ptr);
return 0;
}
当程序运行时,输出结果如下所示:
0 0 0 0 0
Couldn't reallocate memory, exiting...
在此示例中,我们从开始分配了一个大小为5的整型数组。接着,我们通过 realloc()
函数来扩大内存块的大小,将它扩大到了100个整型数字。由于内存不足,分配失败,所以我们在这个示例程序中使用了 exit(0);
语句来退出程序。
在 C 编程语言中,realloc()
函数用于重新分配已经分配的内存大小。它有两个参数:指向已分配内存的指针和新的内存大小。如果需要的话,realloc()
函数会重新分配内存块的大小。它返回一个指向新分配内存的指针。需要注意的是,在通过 realloc() 函数重新分配内存块之后,原始内存块应该被释放(使用 free()
函数),这样可以释放内存并避免内存泄漏。