打印
[技术问答]

编程中数据存储空间不足时应该怎样修改程序语句

[复制链接]
1146|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。而原来的内存块保持不变。

使用特权

评论回复
5
coshi| | 2023-5-8 15:35 | 只看该作者
realloc失败的时候,原来的内存不改变,不会释放也不会移动

使用特权

评论回复
6
kxsi| | 2023-5-8 15:51 | 只看该作者
传递给realloc的指针必须是先前通过malloc(), calloc(), 或realloc()分配的

使用特权

评论回复
7
wiba| | 2023-5-8 16:08 | 只看该作者
传递给realloc的指针可以为空,等同于malloc

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

3523

帖子

4

粉丝