[技术问答] 编程中数据存储空间不足时应该怎样修改程序语句

[复制链接]
1453|6
 楼主| jimmhu 发表于 2023-4-23 20:50 | 显示全部楼层 |阅读模式

可以用realloc函数

原型:void

*realloc(void

*p,

unsigned

int

size);

作用:P是指向想要扩充内存的存储单元的指针,对给定的指针

p

所指的空间进行扩大或者缩小,size

新的目标大小。

无论是扩张或是缩小,原有内存中的内容将保持不变。

当然,对于缩小,则被缩小的那一部分的内容会丢失。

realloc

并不保证调整后的内存空间和原来的内存空间保

持同一内存地址。相反,realloc

返回的指针很可能指向

一个新的地址。

若分配失败,则返回空指针NULL。

例:T=(ElemType

*)malloc(3*sizeof(ElemType));

p=(ElemType

*)realloc(T,

6*sizeof(ElemType));

其中ElemType是指某一种数据类型


tpgf 发表于 2023-5-8 14:23 | 显示全部楼层
先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地址,并且将mem_address返回,如果空间不够,先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来mem_address所指内存区域(注意:原来指针是自动释放,不需要使用free),同时返回新分配的内存区域的首地址。即重新分配存储器块的地址。
qcliu 发表于 2023-5-8 14:36 | 显示全部楼层
当内存不再使用时,应使用free()函数将内存块释放
drer 发表于 2023-5-8 15:21 | 显示全部楼层
如果没有足够可用的内存用来完成重新分配(扩大原来的内存块或者分配新的内存块),则返回NULL。而原来的内存块保持不变。
coshi 发表于 2023-5-8 15:35 | 显示全部楼层
realloc失败的时候,原来的内存不改变,不会释放也不会移动
kxsi 发表于 2023-5-8 15:51 | 显示全部楼层
传递给realloc的指针必须是先前通过malloc(), calloc(), 或realloc()分配的
wiba 发表于 2023-5-8 16:08 | 显示全部楼层
传递给realloc的指针可以为空,等同于malloc
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

3787

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部