【技巧】动态分配内存的一个简便用法

  动态申请和分配堆空间的内存一般需要用到:
  
申请一块连续的 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;

这样可以让代码变得更加简洁和适用。

posted @ 2019-12-03 07:42  高厉害  阅读(272)  评论(0编辑  收藏  举报