假设 malloc 分配的内存空间不足,realloc 在原来基础上继续分配,这两次分配出来的空间地址连续吗?
你可以输出地址看一下嘛。
遇到这样的问题自己写一小段代码跑一下就知道啦。
P.S. 另外如果你要连续的地址的话,可以 malloc 一个更大的空间,并且把原来的数据复制过去,然后 free 掉原先的那段空间,接着在后面追加(如果你的数据量大的话当我没说)
其实这种事完全不用参考手册,也不用实地验证,只要稍微动一下脑子想一想就行了
换做是你来实现realloc来为“目标内存块”分配更大的内存,你怎么办?你能随便将它后面的内存拿过来用吗?肯定不能啊,因为那部分内存很可能是正在使用的啊。你肯定要先判断才能确定,是不是?就是这么个道理,想想就明白了
6 回答7k 阅读✓ 已解决
1 回答4.6k 阅读✓ 已解决
1.1k 阅读
1 回答540 阅读
632 阅读
494 阅读
1 回答333 阅读
如果觉得遇到这种问题可以查查手册
可以man一下,也可以借助搜索引擎
http://zh.cppreference.com/w/c/memory/realloc
realloc
重新分配给定的内存区域。该区域必须之前曾被malloc()、calloc()或realloc()所分配并且未被free()所释放,否则,其结果是未定义的。
重新分配以下面两者之一完成:
参数
ptr - 指向要被重新分配的内存区域
new_size - 数组新的大小
返回值
指向新分配的内存开始位置的指针,或者在错误发生时为NULL。该指针必须用free()释放。