15.C语言基础完结篇-2

1.内存管理:


    1.malloc
       void *malloc(size_t size);
      功能:
        申请堆区空间
      参数:
        size:申请堆区空间的大小
      返回值:
        返回获得的空间的首地址
        失败返回NULL

    2.free
      void free(void *ptr);
      功能:
      释放堆区空间

      注意:
        1.free只能释放堆区空间
        2.一个空间只能被free一次,多次free程序会崩溃
        3.malloc需要和free搭配使用,如果只有malloc没有free会内存泄露

    练习:要求申请堆区空间,将"hello world"存放到堆区空间,完成打印

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

/*
int main()
{
    int *p = NULL;

    p = malloc(4);
    if (NULL ==p)
    {
        printf("malloc failed\n");
        return 0;
    }

    *p = 100;
    
    printf("*p = %d\n",*p);

    free(p);

    return 0;
}

int main()
{
    char *p = NULL;
    p = malloc(32);

    strcpy(p,"hello world");

    printf("*p=%s\n",p);
    
    free(p);

    return 0;
}
*/


char *FUN()
{
    char *str = NULL;

    str = malloc(32);

    strcpy(str,"hello world");
    
    return str;


}

int main()
{
    char *ret = NULL;

    ret = FUN();

    printf("%s\n",ret);

    free(ret);

    return 0;

}



2.内存溢出:


    内存溢出也称为内存越界



3.内存泄露:


    程序中malloc的空间没有被释放



4.内存碎片:


    由于频繁申请和释放,导致连续的空间分散成一些小的碎片空间,当malloc超过碎片空间时,则无法获得该空间(空间不连续),将这样的空间称为内存碎片
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值