微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 周立功“程序设计与数据结构”:深度解剖动态分布内存的free()函数与realloc()函数

周立功“程序设计与数据结构”:深度解剖动态分布内存的free()函数与realloc()函数

时间:07-25 来源:ZLG致远电子 点击:

(void **pp);

程序清单 1.50 saferfreeh函数接口的实现(saferFree.c)

1     #include

2     #include

3

4     void saferFree(void **pp) 

5     {

6            if(pp != NULL && *pp != NULL)

7                   free(*pp);

8                   *pp = NULL; 

9            }

10   }

如果使用saferFree宏调用saferFree函数,则可以省略类型转换和传递指针的地址。即:

#define NewSaferFree(P) saferFree((void **)&p)

其调用形式如下:

int *pi = malloc(sizeof(int));

NewSaferFree(pi);

>>> 1.9.4 realloc()函数

alloc是allocate分配的缩写,前缀re就是重新分配的意思。如果原内存后面还有剩余的话,realloc()只是修改分配表,还是返回原内存的地址;如果没有剩余内存的话,realloc()将申请新的内存,然后将原内存的数据拷贝到新内存中,原内存将被free()释放掉,realloc()返回新内存的地址。realloc()函数原型如下:

void *realloc(void *pointer, unsigned int size);

当调用realloc()函数时,point必须指向先前通过malloc、calloc或realloc的调用获得的内存块。size表示新分配内存的大小,以字节为单位。其作用是将pointer所指向的动态空间的大小改变为size,pointer的值不变。如果重新分配不成功,则返回NULL;如果通过malloc()已经获得了动态空间,又不想改变其大小,则可以使用realloc()重新分配。
 

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top