dynamic memory allocation

动态内存分配的函数

只有使用指针,才能动态内存分配
堆:在程序执行期间分配内存时的,内存区域的空间称为heap
堆栈:堆栈的空间分配给函数的参数和本地变量.stack

malloc()函数、calloc()函数、realloc()函数因某种原因失败,就返回NULL(空);否则为非NULL(非空);

#include <stdlib.h>
  • 使用动态内存分配时,在程序开头的头文件中包含以上代码。

malloc()函数

  • malloc(要分配的内存字节数)
  • malloc()函数返回所分配的内存的第一个字节的地址。
    因为返回的是一个地址,所以必须使用指针。
int  *pNumber = (int*)malloc(100);
int *pNumber = (int*)malloc(25*sizeof(int));
int *pNumber = (int*)malloc(25*sizeof(int));
if(!pNumer)
{
    printf("code to deal with memory allocation failure");
}

释放动态分配的内存
为什么会出现泄露呢?
当动态分配了一些内存的时候,没有保留对她们的引用,造成无法释放内存。
要释放动态分配的内存地址,必须能访问引用内存块地址

free(pNumber)
pNumber = NULL;

calloc()函数

  • calloc(数组的元素个数size_t,数组元素占用的字节数size_t)。
  • calloc()函数所分配的内存区域的地址返回为void*类型。
int *pNumber =(int*)calloc(75,sizeof(int));

省略了类型转换,让编译器去执行 类型转换

int *pNumber = calloc(75,sizeof(int)); 
pPrimes = calloc(size_t)total,sizeof(unsigned long long)
if(primes == NULL)
{
    printf("Not enough memory. It's the end I'm afraid.\n");
}

扩展动态分配的内存

Extending dynamically allocated memory

realloc()函数

  • realloc(包含地址的指针,要分配的新内存的字节数)
  • realloc()函数返回一个指向新内存的void*指针
  • 新扩展的内存可以大于或小于原内存
  • realloc()函数保存了原内存区域的内容,且保存的量是新旧内存区域中较小的哪一个。(既然是扩展内存为什么不扩展更大的反而选择小的内存呢?)

函数原型:void* realloc()
函数用法 : #include

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值