realloc 用过很多次了。无非就是将已经存在的一块内存扩大。
char* p = malloc(1024);
char* q = realloc(p,2048);
现在的问题是我们应该如何处理指针 p。 刚开始按照我最直观的理解,如果就是直接将 p = NULL;。 到最后只需要释放 q的空间就可以了。
因为最近在做个封装。结果在做单元测试的时候发现。有时候我在 free(q); 的时候会出错。这样我就郁闷了。
后来仔细一跟踪,发现 realloc 完以后 q 和 p 的指针地址是一样。不过有时候又不一样。
仔细查了下资料。得到如下信息:
1.如果 当前连续内存块足够 realloc 的话,只是将p所指向的空间扩大,并返回p的指针地址。 这个时候 q 和 p 指向的地址是一样的。
2.如果 当前连续内存块不够长度,再找一个足够长的地方,分配一块新的内存,q,并将 p指向的内容 copy到 q,返回 q。并将p所指向的内存空间删除。
这样也就是说 realloc 有时候会产生一个新的内存地址 有的时候不会。所以在分配完成后。我们需要判断下 p 是否等于 q。并做相应的处理。
这里有点要注意的是要避免 p = realloc(p,2048); 这种写法。有可能会造成 realloc 分配失败后,p原先所指向的内存地址丢失。
以下来自百度:
1. realloc失败的时候,返回NULL
2. realloc失败的时候,原来的内存不改变,不会释放也不会移动
3. 假如原来的内存后面还有足够多剩余内存的话,realloc的内存=原来的内存+剩余内存,realloc还是返回原来内存的地址; 假如原来的内存后面没有足够多剩余内存的话,realloc将申请新的内存,然后把原来的内存数据拷贝到新内存里,原来的内存将被free掉,realloc返回新内存的地址
4. 如果size为0,效果等同于free()。这里需要注意的是只对指针本身进行释放,例如对二维指针**a,对a调用realloc时只会释放一维,使用时谨防内存泄露。
5. 传递给realloc的指针必须是先前通过malloc(), calloc(), 或realloc()分配的
6.传递给realloc的指针可以为空,等同于malloc。
发表评论
-
set容器的反向迭代器
2013-05-02 16:56 3742#include <iostream> #in ... -
对于CRITICAL_SECTION用法的介绍和理解[转]
2013-04-08 11:50 2181很多人对CRITICAL_SECTION ... -
二维数组知识
2012-09-15 17:20 816二维数组和指针⑴ 用 ... -
extern C的由来
2012-08-09 10:14 695时常在cpp的代码之中看到这样的代码: #ifdef ... -
C++类对象的创建过程
2012-07-26 16:02 938分配空间(Allocation) ... -
静态数据成员和静态成员函数
2012-07-26 15:04 3110静态类成员包括静态数据成员和静态函数成员两部分。 与 ... -
复制构造函数(拷贝构造函数)以及深浅拷贝
2012-07-25 22:39 1428对于普通对象而言复制是很简单的,一般是将变量或者常量赋值给某 ... -
cin、cin.get、cin.getline()、getline()、gets()的用法【转】
2012-07-24 20:05 831学C++的时候,这几个输入函数弄的有点迷糊;这里做个小结,为了 ... -
编程笔记(07-24)
2012-07-24 15:15 6661 #include < stdio.h ... -
堆、栈解疑
2012-07-12 21:53 583一、预备知识—程序的内存分配 一个由C/C++编译的程序 ... -
指针和内存分配的深度理解
2012-07-12 18:57 1030一 :关于指针和堆的内存分配 先来介绍一下指针: 指针一种 ... -
数组指针和指针数组
2012-07-12 18:56 1186先看一下基本的形式,我们从这里起步! ----------- ... -
const指针和指向const的指针
2012-07-12 10:30 2119指向const对象的指针 ... -
typedef的学习
2012-07-11 15:03 738typedef,顾名思义,为“类型定义”,可以解释为:将一种数 ... -
函数指针和指针函数
2012-07-11 11:21 594【函数指针】 ... -
Define学习
2012-07-11 10:12 1073宏替换是C/C++系列语言的技术特色,C/C++语言提 ... -
sizeof 深研
2012-07-11 09:39 6671、什么是sizeof 首先看一下sizeof ... -
内存对齐问题
2012-07-10 22:35 10961.内存数据对齐的原因: 无论如何,为了提高程序的性 ... -
指针深究
2012-07-09 21:55 593在说指向指针的指针之前,不得不说指向变量的指针。先看如下示例: ... -
C语言文件使用方式详解
2012-07-04 10:23 768文件的打开(fopen函数) f ...
相关推荐
realloc函数的使用在数据结构中十分重要,本文给出了使用的例子和使用的具体说明
本文将深入探讨如何使用C语言实现顺序表,并重点讲解`realloc`函数在扩展内存时的作用。 首先,我们需要理解顺序表的基本操作,包括创建、插入、删除和查找。在C语言中,我们可以使用结构体来表示顺序表,例如定义...
4. **malloc, calloc和realloc使用小结**: 这些是C语言中的动态内存管理函数: - `malloc`用于分配指定大小的内存块,返回的指针可以直接使用。 - `calloc`分配连续的内存空间,并初始化为零,适合创建数组。 -...
realloc原型是extern void *realloc(void *mem... #include <stdlib> 有些编译器需要#include ,在TC2.0中可以使用alloc.h头文件 功能 先判断当前的指针是否有足够的连续空间,如果有,扩大mem_address指向的地
`malloc`、`free`和`realloc`是C标准库中的关键函数,用于动态内存分配和释放。本篇文章将深入探讨这些函数的工作原理、用法以及如何在`mm.zip_Free!_realloc`这个项目中实现它们。 首先,我们来看`malloc()`函数。...
在实验中,通过rt_malloc分配内存,然后用rt_realloc尝试扩大内存,最后使用rt_free释放内存,展示了rt_realloc的工作流程。 实验中使用了RT-Thread官方的Realtouch开发板,该板子包含串口3,作为rt_kprintf的输出...
2. 在使用realloc函数时,需要注意原始内存中的数据保持不变,当内存不再使用时,应使用free()函数将内存块释放。 3. realloc函数与malloc、calloc、free、_alloca函数相似,但realloc函数可以重新分配内存块的大小...
本话题主要聚焦于"realloc_test",这是一个与C语言内存管理相关的示例或测试项目,特别是关于`realloc()`函数的使用。`realloc()`是C语言标准库中的一个函数,用于调整已分配内存区域的大小。它在程序开发中扮演着...
内存分配——realloc()函数的使用 在C语言中,realloc()函数是一个非常重要的内存分配函数,它可以将已经分配的内存空间重新分配到一个新的大小。然而,在使用realloc()函数时,需要注意一些隐患,以免造成...
需要注意,如果内存区域被移动,原指针可能不再有效,因此应使用realloc返回的新指针。 4. **realloc的特殊情况**: - 如果realloc的`ptr`参数为NULL,它会像malloc一样分配`new_size`字节的内存。 - realloc的...
就是配套我一篇博客讲解的资源,因为我截图可能不是特别清楚,所以我就将这个图上传上来了。是采用Visio画的。
个人总结各类博客和资料里关于malloc,calloc,realloc的对比
在本文中,我们将深入探讨`realloc()`函数的工作原理、使用方法以及一些最佳实践。 `realloc()`函数的原型如下: ```c void* realloc(void* ptr, size_t size); ``` 其中,`ptr`参数是指向已分配内存的指针,`size`...
下面将详细介绍`realloc()`函数的使用、语法、工作原理以及相关的注意事项。 ### `realloc()`函数简介 `realloc()`函数在`<stdlib.h>`头文件中定义,其基本语法如下: ```c void* realloc(void* ptr, size_t size...