C 分配空间地址的问题

发布于 2022-08-30 16:32:14 字数 64 浏览 16 评论 0

假设 malloc 分配的内存空间不足,realloc 在原来基础上继续分配,这两次分配出来的空间地址连续吗?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

篱下浅笙歌 2022-09-06 16:32:14

如果觉得遇到这种问题可以查查手册
可以man一下,也可以借助搜索引擎
http://zh.cppreference.com/w/c/memory/realloc

realloc

    在头文件 <stdlib.h> 中定义
    void *realloc( void *ptr, size_t new_size );

重新分配给定的内存区域。该区域必须之前曾被malloc()、calloc()或realloc()所分配并且未被free()所释放,否则,其结果是未定义的。
重新分配以下面两者之一完成:

    a) 扩大或收缩目前ptr所指向的区域,若可能的话。区域中的内容保持不变,直至到达新旧大小中较小的一个。如果区域被扩大,数组中新部分的内容是未定义的。
    b) 分配一个新的new_size字节大的内存块,将和新旧大小中较小的一个一样大的内存区域复制过来,并释放旧的块。
    如果内存不足,旧的内存块不会被释放并且返回空指针。

参数

ptr - 指向要被重新分配的内存区域
new_size - 数组新的大小
返回值
指向新分配的内存开始位置的指针,或者在错误发生时为NULL。该指针必须用free()释放。

风柔一江水 2022-09-06 16:32:14

你可以输出地址看一下嘛。
遇到这样的问题自己写一小段代码跑一下就知道啦。
P.S. 另外如果你要连续的地址的话,可以 malloc 一个更大的空间,并且把原来的数据复制过去,然后 free 掉原先的那段空间,接着在后面追加(如果你的数据量大的话当我没说)

南烟 2022-09-06 16:32:14

给你的内存肯定是连续的,但可能不是原来那块区域。

要走就滚别墨迹 2022-09-06 16:32:14

很有可能不连续,但你使用的肯定是一个连续的内存块。请参考:c语言中realloc()函数解析

傾城如夢未必闌珊 2022-09-06 16:32:14

其实这种事完全不用参考手册,也不用实地验证,只要稍微动一下脑子想一想就行了

换做是你来实现realloc来为“目标内存块”分配更大的内存,你怎么办?你能随便将它后面的内存拿过来用吗?肯定不能啊,因为那部分内存很可能是正在使用的啊。你肯定要先判断才能确定,是不是?就是这么个道理,想想就明白了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文