C语言stdlib头文件(stdlib.h)中realloc函数的用法及代码示例。
用法:
void* realloc (void* ptr, size_t size);
重新分配内存块
该函数可以将存储块移动到新的位置(其地址由该函数返回)。
即使将存储块移动到新位置,该存储块的内容也会保留到新旧大小中的较小者。如果是新的size较大,则新分配部分的值不确定。
万一ptr是一个空指针,该函数的行为类似于malloc,分配一个新的size个字节,并返回指向其开头的指针。
否则,如果size为零,先前分配在的内存ptr被释放,就像对free做了,并且空指针返回。
如果size为零,则返回值取决于特定的库实现:它可以是空指针或其他不应取消引用的位置。
如果函数未能分配所请求的内存块,则返回空指针,并使用参数指向该内存块ptr未取消分配(它仍然有效,并且内容不变)。
参数
返回值
指向重新分配的内存块的指针,该指针可以与ptr或新位置。该指针的类型是
void*
,可以将其强制转换为所需的数据指针类型,以便将其取消引用。示例
/* realloc example: rememb-o-matic */
#include <stdio.h> /* printf, scanf, puts */
#include <stdlib.h> /* realloc, free, exit, NULL */
int main ()
{
int input,n;
int count = 0;
int* numbers = NULL;
int* more_numbers = NULL;
do {
printf ("Enter an integer value (0 to end): ");
scanf ("%d", &input);
count++;
more_numbers = (int*) realloc (numbers, count * sizeof(int));
if (more_numbers!=NULL) {
numbers=more_numbers;
numbers[count-1]=input;
}
else {
free (numbers);
puts ("Error (re)allocating memory");
exit (1);
}
} while (input!=0);
printf ("Numbers entered: ");
for (n=0;n<count;n++) printf ("%d ",numbers[n]);
free (numbers);
return 0;
}
程序会提示用户输入数字,直到输入零字符为止。每次引入新值时,数字所指向的存储块都会增加
int
。相关用法
- C语言 atof用法及代码示例
- C语言 atoi用法及代码示例
- C语言 atol用法及代码示例
- C语言 atoll用法及代码示例
- C语言 strtod用法及代码示例
- C语言 strtof用法及代码示例
- C语言 strtol用法及代码示例
- C语言 strtold用法及代码示例
- C语言 strtoll用法及代码示例
- C语言 strtoul用法及代码示例
- C语言 strtoull用法及代码示例
- C语言 rand用法及代码示例
- C语言 srand用法及代码示例
- C语言 calloc用法及代码示例
- C语言 free用法及代码示例
- C语言 malloc用法及代码示例
- C语言 abort用法及代码示例
- C语言 atexit用法及代码示例
- C语言 at_quick_exit用法及代码示例
- C语言 exit用法及代码示例
- C语言 getenv用法及代码示例
- C语言 quick_exit用法及代码示例
- C语言 system用法及代码示例
- C语言 _Exit用法及代码示例
- C语言 bsearch用法及代码示例
- C语言 qsort用法及代码示例
- C语言 abs用法及代码示例
- C语言 div用法及代码示例
- C语言 labs用法及代码示例
- C语言 ldiv用法及代码示例
- C语言 llabs用法及代码示例
- C语言 lldiv用法及代码示例
- C语言 mblen用法及代码示例
- C语言 mbtowc用法及代码示例
- C语言 wctomb用法及代码示例
- C语言 wcstombs用法及代码示例
注:本文由纯净天空筛选整理自C标准库大神的英文原创作品 C realloc function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。