周立功“程序设计与数据结构”:深度解剖动态分布内存的free()函数与realloc()函数
(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()重新分配。
- 周立功手把手教你学嵌入式编程:函数指针与指针函数的应用(07-29)
- 周立功《程序设计与数据结构》:字符串函数(08-05)
- 嵌入式如何进一步成长,该学习哪些书呢?(08-13)
- 不完全类型和抽象数据类型的定义(08-14)
- 怎么像整数一样计算字符?(08-14)
- 算法与数据结构——接口(08-19)