厦门手机网站制作,wordpress 文章类,长沙做网站公司哪家,wordpress的文件夹目录
前提须知#xff1a;
函数介绍#xff1a;
函数原型#xff1a;
使用realloc#xff1a; realloc在调整内存空间的是存在两种情况/使用realloc为扩大空间的两种情况
1.是剩下的没有被分配的空间足够
2 .剩下没有被分配的空间不够了
注意事项#xff1a;
rea…目录
前提须知
函数介绍
函数原型
使用realloc realloc在调整内存空间的是存在两种情况/使用realloc为扩大空间的两种情况
1.是剩下的没有被分配的空间足够
2 .剩下没有被分配的空间不够了
注意事项
realloc和malloc的等价关系 前提须知 http://t.csdn.cn/bw07Ohttp://t.csdn.cn/bw07O 函数介绍
realloc函数的出现让动态内存管理更加灵活。 有时会我们发现过去申请的空间太⼩了有时候我们⼜会觉得申请的空间过⼤了那为了合理的时 候内存我们⼀定会对内存的⼤⼩做灵活的调整。那 realloc 函数就可以做到对动态开辟内存大小的调整。
函数原型 void* realloc (void* ptr, size_t size);ptr 是要调整的内存地址 size 调整之后新大小返回值为调整之后的内存起始位置。
使用realloc 如上图所示使用realloc将申请的空间进行调整。p是所需要调整的空间的指针指向需要调整的空间的起始位置。40是需要调整成为的大小也就是将原来申请的空间调整成40个字节的大小。 realloc在调整内存空间的是存在两种情况/使用realloc为扩大空间的两种情况
1.是剩下的没有被分配的空间足够 如图所示尚未分配的空间足够应对realloc扩大空间的调整并不会因为内存空间不够而产生一系列的问题。
也因为剩下的没有被分配的空间足够应付扩张所以再进行realloc调整内存后返回的地址还是当前这个地址。
2 .剩下没有被分配的空间不够了 如图所示尚未分配的空间不足以因对realloc进行扩大空间的调整。
也因此我们需要将之前存储的数据进行转移转移到一个连续的、经历realloc调整后、内存足够的空间中也因为数据的转移所以后面返回的是新空间的地址。 注意事项
1.当增加的内存空间过大时可能会导致扩容失败而扩容失败会返回空指针。
也因为会返回空指针而导致以下代码会出现错误
p realloc(p,40);
p是原先旧空间的指针内部存放的是旧空间的地址而这一步返回指针地址也会导致原先的旧指针内的地址被NULL覆盖变成空指针 。
正确做法
int*ptr (int*)realloc(p40);
if (ptr ! NULL)
{p ptr;
}
else
{perror(realloc);return 1;
} 所以为了防止这一步的扩容失败我们得从新换一个指针变量进行赋予扩容后的指针地址并且进行判断是否扩容失败 2.realloc的调整情况是情况2的时候旧的空间会被realloc释放
3.在注意事项1中的背景下我们得到不能直接freeptr因为ptr的指向是新的空间使用free后这个新的空间会被释放。
正确:
if (ptr ! NULL)
{p ptr;ptr NULL;
}错误:
if (ptr ! NULL)
{p ptr;free(ptr)
} realloc和malloc的等价关系
当reaLLoc函数的第一个参数是NULL指针的时候功能类似于malloc函数。
int*p (int*)realloc(NULL40);/int *p (int*)malloc(10 * sizeof(int));realloc(NULL40);/malloc(10 * sizeof(int));