C语言realloc函数的用法(附带实例)
realloc() 是 C 语言标准库中的函数,位于
realloc() 的返回值是一个指向新地址的指针,如果出现错误,则返回NULL。
例如,改变一个分配的浮点型空间大小成为整型空间大小,代码如下:
【实例】定义一个整型指针和浮点型指针,利用 realloc() 函数重新分配内存空间。
在 C 语言中使用 realloc() 函数时,需要注意以下几点:
例如:
<stdlib.h>头文件中,它的的原型如下:
void *realloc(void *ptr,size_t size);该函数的功能是改变 ptr 指针指向的空间大小为 size。设定的 size 大小可以是任意的,也就是说既可以比原来的数值大,也可以比原来的数值小。
realloc() 的返回值是一个指向新地址的指针,如果出现错误,则返回NULL。
例如,改变一个分配的浮点型空间大小成为整型空间大小,代码如下:
fDouble=(double*)malloc(sizeof(double)); iInt=realloc(fDouble,sizeof(int));其中,fDouble 指向分配的浮点型空间,之后使用 realloc() 函数改变 fDouble 指向的空间的大小,将其大小设置为整型大小,然后将改变后的内存空间的地址返回并赋给 iInt 整型指针。
【实例】定义一个整型指针和浮点型指针,利用 realloc() 函数重新分配内存空间。
#include<stdio.h>
#include <stdlib.h>
int main()
{
int *fDouble; /*定义整型指针*/
char* iInt; /*定义浮点型指针*/
fDouble = (int*)malloc(sizeof(int)); /*使用malloc()分配整型空间*/
printf("%d\n", sizeof(*fDouble)); /*输出空间的大小*/
iInt = realloc(fDouble, sizeof(char)); /*使用realloc()改变分配空间大小*/
printf("%d\n", sizeof(*iInt)); /*输出空间的大小*/
return 0; /*程序结束*/
}
运行程序,结果为:
4
1
在 C 语言中使用 realloc() 函数时,需要注意以下几点:
- realloc() 函数用于重新分配内存,它会调整之前分配的堆空间的大小。
- 如果 realloc() 成功,它会返回一个新的指针,指向新分配的内存空间。原来的内存空间由 realloc() 函数负责释放。你只需要使用新的指针即可。
- 如果 realloc() 失败(例如内存不足),它会返回 NULL,而原来的内存空间仍然有效,不会被释放。在这种情况下,你需要检查返回值,避免内存泄漏。
- 使用 realloc() 重新分配的内存空间,最终仍然需要通过 free() 函数手动释放,以避免内存泄漏。
例如:
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = NULL;
int size = 5;
// 初始分配内存
ptr = (int *)malloc(size * sizeof(int));
if (ptr == NULL) {
printf("内存分配失败!\n");
return 1;
}
printf("初始分配内存: %p\n", (void *)ptr);
// 使用内存
for (int i = 0; i < size; i++) {
ptr[i] = i + 1;
}
// 扩大内存
size *= 2;
int *temp = (int *)realloc(ptr, size * sizeof(int)); // 使用临时指针
if (temp == NULL) {
printf("内存重新分配失败!\n");
free(ptr); // 释放原来的内存
ptr = NULL;
return 1;
}
ptr = temp; // 重新分配成功,更新指针
printf("重新分配内存: %p\n", (void *)ptr);
// 继续使用新分配的内存
for (int i = 5; i < size; i++) {
ptr[i] = i + 1;
}
// 打印内容
for (int i = 0; i < size; i++) {
printf("%d ", ptr[i]);
}
printf("\n");
// 手动释放内存
free(ptr);
ptr = NULL;
return 0;
}
运行结果为:
初始分配内存: 00000000007013E0
重新分配内存: 00000000007013E0
1 2 3 4 5 6 7 8 9 10
ICP备案:
公安联网备案: