动态内存知识总结

malloc()函数
函数原型:extern void *malloc(unsigned int num_bytes);
函数功能:分配长度为num_bytes字节的内存块。
函数的使用:
①该函数接受一个参数:所需的内存字节数。
②malloc()函数会找到合适的匿名空闲内存,并且返回动态内存块的首字节地址。
③因此,可以把该地址赋给一个指针变量,并且用指针访问这块内存。
④注意的是:其返回的指针为void类型的指针,所以使用时根据自己的需求而进行类型转换。
⑤通常,malloc()函数要与free()配套使用,free()函数的参数是malloc()函数返回的地址,该函数释放malloc()分配的内存。

代码示范如下:

#include<stdio.h>
#include<stdlib.h>   //为malloc()和free()提供原型

int main()
{
    int *p;
    p = (int *)malloc(10*sizeof(int));
    if(p != NULL)
    {
        int i = 0;
        for(i=0; i<10; i++)
        {
            *(p+i) = i;
            printf("%d\n", *(p+i));
        }
    }
    else
    {
        printf("没有足够的内存!");
        return 0;
    }
    free(p);
    p = NULL;//释放完成后,P是个野指针,养成好习惯对让p指向空
    return 0;
}

realloc()函数
函数原型:extern void *realloc(void *mem_address, unsigned int newsize);
函数功能:判断指针是否有足够的空间,如果有,扩大men_address指向的地址,并将men_address返回,
如果空间不够,则按照newsize大小分配空间,并将原数据拷贝到新的空间,自动释放原空间,反回新的地址。

代码示范如下:


#include<stdio.h>
#include<stdlib.h>

int main()
{
    int i = 0;
    int *p;
    int *p1;
    p = (int *)malloc(10*sizeof(int));
    if(p != NULL)
    {
        for(i=0; i<10; i++)
        {
            *(p+i) = i;
            printf("%d\n", *(p+i));
        }
    }
    p1 = p;
    p1 = (int *)realloc(p,10*sizeof(int));
    if(p1 != NULL)
    {
        for(i=0; i<10; i++)
        {
            *(p1+i) = i;
            printf("%d\n", *(p1+i));
        }
    }
    else
    {
        printf("没有足够的内存!");
        return 0;
    }
    free(p1);
    p1 = NULL;
    return 0;
}

calloc()函数
函数原型:void *calloc(size_tn, size_t size);
函数功能:和malloc()函数类似,但是它把所有位都设初始化为0

动态内存使用注意事项:
①对空指针的解引用
②对动态内存的越界访问
③释放非动态开辟内存
④释放动态内存的一部分
⑤对已经释放的内存再次访问
⑥对同一块内存的多次释放

最后,为了您和他人的安全,请务必使用free()!!!
请务必使用free()!!!
务必使用free()!!
必使用free()!!!
使用free()!!!
用free()!!!
free()!!!**

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值