函数原型
void *realloc(void *ptr, size_t size);
作用
realloc在原有内存基础上在堆上再分配指定数量的内存块,分配成功,返回新的地址
说明
在之前内存空间追加内存块成功,返回值为原内存空间指针
在之前内存空间追加内存块失败,重新申请新的内存空间,释放原内存空间,返回新申请内存空间地址
提示
realloc有返回指针不是原内存空间指针的情况,使用realloc要注意验证返回值
参考例程
char *p_1,*p_2;
p_1 = malloc(sizeof(char)*1024);
p_2 = p_1; // 下面realloc函数有可能会释放这里 p_1指向的内存空间,导致p_2成为野指针
p_1 = realloc(p_1,1024); // 这里存在p_1指针值改变情况
realloc函数源码
void *realloc(void *ptr, size_t size) {
memblock_t *m;
void *new = NULL;
if (ptr) {
if (!(m = memblock_get(ptr))) {
printk(KERN_ERR “bug: realloc non-exist memory\n”);
return NULL;
}
if (size == m->size) // 当前已用内存空间 和 新申请内存空间相等
return ptr;
if (size != 0) {
if (!(new = kmalloc(size, GFP_KERNEL)))
return NULL;
memmove(new, ptr, m->size);//数据拷贝
if (memblock_add(new, size)) {
kfree(new);
return NULL;
}
}
memblock_del(m);
kfree(ptr);//执行到这,之前申请的内存空间会被释放
}
else {
if (size != 0) {
if (!(new = kmalloc(size, GFP_KERNEL)))
return NULL;
if (memblock_add(new, size)) {
kfree(new);
return NULL;
}
}
}
return new;
}
今天的文章realloc函数分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/6107.html