📅  最后修改于: 2020-09-25 08:58:22             🧑  作者: Mango
realloc() 函数重新分配以前使用malloc(),calloc()或realloc() 函数分配但尚未使用free() 函数释放的内存。
如果新大小为零,则返回的值取决于库的实现。它可能会或可能不会返回空指针。
void* realloc(void* ptr, size_t new_size);
该函数在
realloc() 函数返回:
在重新分配内存时,如果没有足够的内存,则不会释放旧的内存块,并返回空指针。
如果旧指针(即ptr)为null,则调用realloc()与以新大小为参数调用malloc() 函数相同。
有两种可能的重新分配内存的方法。
#include
#include
using namespace std;
int main()
{
float *ptr, *new_ptr;
ptr = (float*) malloc(5*sizeof(float));
if(ptr==NULL)
{
cout << "Memory Allocation Failed";
exit(1);
}
/* Initializing memory block */
for (int i=0; i<5; i++)
{
ptr[i] = i*1.5;
}
/* reallocating memory */
new_ptr = (float*) realloc(ptr, 10*sizeof(float));
if(new_ptr==NULL)
{
cout << "Memory Re-allocation Failed";
exit(1);
}
/* Initializing re-allocated memory block */
for (int i=5; i<10; i++)
{
new_ptr[i] = i*2.5;
}
cout << "Printing Values" << endl;
for (int i=0; i<10; i++)
{
cout << new_ptr[i] << endl;
}
free(new_ptr);
return 0;
}
运行该程序时,输出为:
Printing Values
0
1.5
3
4.5
6
12.5
15
17.5
20
22.5
#include
#include
using namespace std;
int main()
{
int *ptr, *new_ptr;
ptr = (int*) malloc(5*sizeof(int));
if(ptr==NULL)
{
cout << "Memory Allocation Failed";
exit(1);
}
/* Initializing memory block */
for (int i=0; i<5; i++)
{
ptr[i] = i;
}
/* re-allocating memory with size 0 */
new_ptr = (int*) realloc(ptr, 0);
if(new_ptr==NULL)
{
cout << "Null Pointer";
}
else
{
cout << "Not a Null Pointer";
}
return 0;
}
运行该程序时,输出为:
Null Pointer
#include
#include
#include
using namespace std;
int main()
{
char *ptr=NULL, *new_ptr;
/* reallocating memory, behaves same as malloc(20*sizeof(char)) */
new_ptr = (char*) realloc(ptr, 50*sizeof(char));
strcpy(new_ptr, "Welcome to Programiz.com");
cout << new_ptr;
free(new_ptr);
return 0;
}
运行该程序时,输出为:
Welcome to Programiz.com