C语言_动态内存分配
malloc
- 返回类型为void *
- 参数为(unsigned int size),表示总共要开辟的字节数
1 | int* p = nullptr; |
calloc
- 返回类型为*void
- 参数为(unsigned int count, unsigned int size),count表示变量数,size表示单个变量(类型)的字节数。
1 |
|
free
-
不管是malloc还是calloc开辟的空间都是用free(p)来释放的。
-
free并不是把p释放掉了,而是把p指向堆区的空间从引用状态转换成未引用状态。
-
空间的释放只能释放一次,不能释放多次
-
free(p)释放后,要给p赋值nullptr,防止指针失效带来的麻烦。
1
2
3
4int* p = (int*)My_Calloc(10, sizeof(int));
free(p);
p = nullptr;
return 0;
realloc
realloc扩充或收缩之前分配的内存块(重新分配内存块)
1 | void *realloc(void *ptr, size_t new_size); |
- 参数中的ptr指向需要重新分配的内存区域的地址,new_size为新的字节数
- 返回值:成功时,返回指向新分配内存的指针,返回的指针必须用free或realloc归还。;失败时,返回空指针。原指针ptr保持有效,并需要通过free或realloc归还。
重新分配给定的内存区域。它必须是之前为malloc/calloc/realloc分配的,并且仍未被free或realloc的调用所释放。否则,结果未定义。
1 | int size=5;//分配空间的变量数为5 |