继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【备战春招】第8天 嵌入式工程师学习笔记

慕粉152226940
关注TA
已关注
手记 72
粉丝 8
获赞 43

【备战春招】第8天 嵌入式工程师学习笔记

课程信息

课程内容概述

1. 简介

本节介绍了C语言中的内存分配。

2. 内存分配图示说明

图片描述

3. 堆区空间的分配

3.1 malloc函数

#include <stdlib.h>

void  *malloc(unsigned int size)
功能:从堆区分配内存
参数:
@size   分配内存的字节数
返回值:
成功返回分配内存的首地址,失败返回NULL

3.2 free函数

#include <stdlib.h>

void  free(void *ptr)
功能:释放内存
参数:
@ptr  分配内存的首地址
返回值:
无


3.3 memset函数

#include <string.h>

void *memset(void *s, int c, size_t n);
功能:把s所指向内存区域的前n个字节,全部置为c
参数:
@s   想要操作内存区域的首地址
@c   内存区域填充的值
@n   需要填充的字节数
返回值:
成功返回s所指向的地址,
失败返回NULL

3.4 代码示例

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

#define N 5 

int *get_memory_addr()
{
        int *addr = NULL;

        addr = (int *)malloc(sizeof(int) * N);
        if(NULL == addr)
        {
                printf("malloc is fail!\n");
                return NULL;
        }
        memset(addr,0,sizeof(sizeof(int) * N));

        return addr;
}

void input_array(int *p)
{
        int i = 0;
        printf("please input %d data : ",N);
        for(i = 0;i < N;i++)
        {
                scanf("%d",&p[i]);        
        }
}

void ouput_array(int *p)
{
        int i = 0;
        for(i = 0;i < N;i++)
        {
                printf("%d ",p[i]);        
        }
        printf("\n");
}

int main()
{

        int *t = NULL;

        t = get_memory_addr();

        input_array(t);
        ouput_array(t);

        free(t);
        t = NULL;
        return 0;
}


运行结果

please input 5 data : 10 20 30 40 50
10 20 30 40 50 

学习心得

C语言中的内存管理,使用时需要使用多少内存就分配多少内存,不要过多分配;使用完以后一定要free(),要不然可能会造成内存泄漏。

当一个程序在操作系统中运行结束后,它运行过程中分配的内存都会被释放掉。。

课程截图

1. 内存泄漏的示例

图片描述

2. 查看程序的内存分配

图片描述

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP