发布网友 发布时间:2022-04-01 08:29
共3个回答
懂视网 时间:2022-04-01 12:51
realloc函数使用规则如下:
1、realloc失败的时候,返回NULL;
2、realloc失败的时候,原来的内存不改变,不会释放也不会移动;
3、假如原来的内存后面还有足够多剩余内存的话,realloc的内存=原来的内存+剩余内存,realloc还是返回原来内存的地址; 假如原来的内存后面没有足够多剩余内存的话,realloc将申请新的内存,然后把原来的内存数据拷贝到新内存里,原来的内存将被free掉,realloc返回新内存的地址;
4、如果size为0,效果等同于free()。这里需要注意的是只对指针本身进行释放,例如对二维指针a,对a调用realloc时只会释放一维,使用时谨防内存泄露;
5、传递给realloc的指针必须是先前通过malloc(), calloc(), 或realloc()分配的;
6、传递给realloc的指针可以为空,等同于malloc。
realloc函数为C语言函数。其功能为先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域,同时返回新分配的内存区域的首地址,即重新分配存储器块的地址。
热心网友 时间:2022-04-01 09:59
realloc函数 只能用于 动态数组 和 指针,用于 重新分配数组单元。
所以不能用于 定态数组处。
例如 int a[10]; 你不能用 realloc函数重新分配a的大小。
如果是 int *a; 你可以用 malloc 分配a的大小,用realloc 重新分配数组单元,增减都可以。
------------
这是函数原型,返回 指针
void *realloc( void *memblock, size_t size );
热心网友 时间:2022-04-01 11:17
新分配在堆内的内存,数组定义之后不能改变大小,realloc(p,sizeof(p)+sizeof(int))函数不会改变p的值,新的内存地址是函数的返回值:
int a[4], *p=a;
int *q=(int *)realloc(p,sizeof(p)+sizeof(int));//注意:sizeof(p)不是数组的大小,而是指针的大小
这里的q是不可能等于p的,想扩大静态数组是不可能的。
//动态分配的内存才可能扩大
int *p = (int *)malloc(4);
int *q = (int *)realloc(p, 8);
if(q==p) 只是扩大内存
if(q!=p) 重新分配内存,并拷贝数据
if(q==NULL) 函数调用失败