C 分配空间地址的问题
假设 malloc 分配的内存空间不足,realloc 在原来基础上继续分配,这两次分配出来的空间地址连续吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
假设 malloc 分配的内存空间不足,realloc 在原来基础上继续分配,这两次分配出来的空间地址连续吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
如果觉得遇到这种问题可以查查手册
可以man一下,也可以借助搜索引擎
http://zh.cppreference.com/w/c/memory/realloc
realloc
重新分配给定的内存区域。该区域必须之前曾被malloc()、calloc()或realloc()所分配并且未被free()所释放,否则,其结果是未定义的。
重新分配以下面两者之一完成:
参数
ptr - 指向要被重新分配的内存区域
new_size - 数组新的大小
返回值
指向新分配的内存开始位置的指针,或者在错误发生时为NULL。该指针必须用free()释放。
你可以输出地址看一下嘛。
遇到这样的问题自己写一小段代码跑一下就知道啦。
P.S. 另外如果你要连续的地址的话,可以 malloc 一个更大的空间,并且把原来的数据复制过去,然后 free 掉原先的那段空间,接着在后面追加(如果你的数据量大的话当我没说)
给你的内存肯定是连续的,但可能不是原来那块区域。
很有可能不连续,但你使用的肯定是一个连续的内存块。请参考:c语言中realloc()函数解析
其实这种事完全不用参考手册,也不用实地验证,只要稍微动一下脑子想一想就行了
换做是你来实现realloc来为“目标内存块”分配更大的内存,你怎么办?你能随便将它后面的内存拿过来用吗?肯定不能啊,因为那部分内存很可能是正在使用的啊。你肯定要先判断才能确定,是不是?就是这么个道理,想想就明白了