C和C++编程中的realloc()

时间:2020-02-23 14:30:03  来源:igfitidea点击:

当需要动态分配内存时,在使用C或者C++语言进行编程时可能会有很多情况。
通常,编译器在编译过程中为程序分配内存。

在计算机不知道要分配多少内存的情况下,例如在数组初始化的情况下(没有预定义的数组长度),C和C++编程语言都为用户提供了在运行时动态分配内存的能力。

用于动态分配内存的四个功能是:

  • malloc()
  • calloc()
  • realloc()
  • free()

在C和C++中,上述所有函数都在stdlibcstdlib头文件中定义。
了解有关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++编写的代码。