【技巧】动态分配内存的一个简便用法
动态申请和分配堆空间的内存一般需要用到:
申请一块连续的 size 大小的内存块区域:
void* malloc(unsigned int size);
申请一块连续的 size 大小的内存块区域:(并置0)
void* calloc(unsigned int num,unsigned int size);
扩展或缩小一块原有的内存块区域,保留原数据:
void*realloc(void *mem_address, unsigned int newsize);
释放空间:
void free(void *ptr)
1.等价于 malloc ()
在实际使用中,我们总是先调用 malloc() / calloc() ,然后通过 realloc() 来动态管理内存区域。
有时候这会是一种很笨拙的做法,例如我们需要的内存空间可能存在没有任何成员的情况,那么我们每次操作之前还需要判断内存区域长度,然后决定是否要先使用 malloc() 来申请空间。
例如:
if(arr_size == 0)
arr = (int*)malloc(size);
else
arr = (int*)realloc(arr, size);
然而,实际上我们可以只使用 realloc() :
arr = (int*)realloc(arr, size);
只要当原空间没有任何成员时,arr 指向 NULL 就可以这样用。
此时:
arr = (int*)realloc(arr, size);//arr == NULL
**等价于**
arr = (int*)malloc(size);
2.等价于 free()
若 realloc() 的 size 为 0
则:
arr = (int*)realloc(arr, size);//size == 0
arr = NULL;
**等价于**
free(arr);
arr = NULL;
这样可以让代码变得更加简洁和适用。