C和C++编程中的realloc()
当需要动态分配内存时,在使用C或者C++语言进行编程时可能会有很多情况。
通常,编译器在编译过程中为程序分配内存。
在计算机不知道要分配多少内存的情况下,例如在数组初始化的情况下(没有预定义的数组长度),C和C++编程语言都为用户提供了在运行时动态分配内存的能力。
用于动态分配内存的四个功能是:
malloc()
calloc()
realloc()
free()
在C和C++中,上述所有函数都在stdlib
和cstdlib
头文件中定义。
了解有关malloc()和calloc()的更多信息
在本教程中,我们将介绍两种语言的realloc()函数。
realloc()函数
realloc()函数动态地重新分配先前分配的内存(未释放)并调整其大小。
语法:
ptr = realloc( ptr , new_size );
- ptr –指向先前分配的内存的第一个字节的指针。
重新分配后,它用作指向新分配的内存的第一个字节的指针, - " new_size" –它是用于重新分配的内存块的新大小,以字节为单位。
realloc()函数在成功重新分配内存时返回空指针。
而在失败时返回Null指针。
当程序需要时,realloc()函数会自动将更多内存分配给指针。
如果指针根据定义分配了4个字节,并且将大小为6个字节的数据传递给它,则C或者C++中的realloc()函数可以帮助动态分配更多内存。
在C中重新分配
以下代码说明了C中realloc()
的用法。
#include<stdio.h> #include<stdlib.h> //required for using realloc() in C int main() { int *ptr; int i; //typecasting pointer to integer ptr= (int *)calloc(4,sizeof(int)); if(ptr!=NULL) { for(i=0;i<4;i++) { printf("Enter number number %d: ", i+1); scanf("%d",(ptr+i)); } } //reallocation of 6 elements ptr= (int *)realloc(ptr,6*sizeof(int)); if(ptr!=NULL) { printf("\nNew memory allocated!\n"); for(;i<6;i++) { printf("Enter new number %d: ",i); scanf("%d",(ptr+i)); } } printf("\n\nThe numbers are:\n"); for(i=0;i<6;i++) { printf("%d \n",ptr[i]); } free(ptr); return 0; }
理解代码:在上面的代码中,我们尝试使用C中的realloc()
函数来解决模拟的现实情况。
如您所见,在声明了整数指针" ptr"和整数迭代器" i"之后,我们已经使用calloc()为4组整数类型数据动态分配了内存。
使用ptr指向第一个存储位置。
然后,我们使用条件" ptr!= NULL"检查了内存分配是否成功。
成功分配内存后,我们接受了用户输入的选择数量。
这些数字是存储在由calloc()
函数分配的内存空间内的特定值或者数据。
但是之后,我们又要存储两个数字。
在这种情况下,我们使用realloc()
函数并为总共6组数据重新分配内存空间。
成功重新分配后,先前存储的4个数据保持不变并且保持不变。
因此,因此,我们接受用户输入的2个新数据。
当然,要检查是否已存储所有数据,我们尝试使用指针" ptr"打印所有数据。
之后,我们再次使用realloc(ptr,0)
释放我们已使用的所有内存位置。
简而言之,realloc(ptr,0)
执行相同的任务free(ptr)
。
在下一节中,我们使用C++编程遵循相同的逻辑。
C++中的realloc()
下面给出的代码说明了C++中realloc()
的用法。
#include<iostream> #include<cstdlib> //for using realloc() in C++ using namespace std; int main() { int *ptr; int i; //allocation of memory for 4 elements ptr= (int *)calloc(4,sizeof(int)); if(ptr!=NULL) { for(i=0;i<4;i++) { cout<<"Enter number "<<i<<":"; cin>>ptr[i]; } } //reallocation of memory ptr= (int *)realloc(ptr,6*sizeof(int)); if(ptr!=NULL) { cout<<"\nNew memory allocated!\n"; for(;i<6;i++) { cout<<"Enter new number "<<i<<":"; cin>>ptr[i]; } } cout<<"\n\nThe numbers are:\n"; for(i=0;i<6;i++) { cout<<ptr[i]<<endl; } free(ptr); return 0; }
输出将与上面的图像相同。
唯一的区别是现在用C++编写的代码。