【嵌入式软件C编程】主函数free子函数malloc地址的两种方式以及注意事项

本文档主要记录嵌入式C语言在子函数中应用malloc函数的方式,在实际项目中内存管理特别重要

一般在主函数中(main)使用malloc函数,然后在通过free函数进行释放内存,但有时候如果必须在子函数长调用malloc函数该怎样进行内存释放呢?

个人简介

  • 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。
  • 个人主页:欢迎访问我的 Ethernet_Comm 博客主页
  • 支持我:点赞+收藏⭐️+留言
    - 系列专栏:嵌入式C编程
  • 格言:写文档啊不是写文章,重要的还是直白!
  • 方式1:通过函数返回值
  • 方式2:通过二级指针传参

【嵌入式软件C编程】主函数free子函数malloc地址的两种方式以及注意事项

    • 1. 代码展示
    • 2. 实验结果
    • 3. 原理介绍

1. 代码展示

直接展示测试代码:

/*无参数,函数返回 malloc 的地址 */
int * test_malloc_ins(){
    int *fun_val  = (int)malloc(sizeof(int));
    printf("test_malloc_ins fun_val addr  = 0x%08x \r\n",fun_val);
    return fun_val;
}

/*无返回值,函数通过二级指针传递地址*/
void test_malloc_ins_2(int **pointer){
    int *fun_val  = (int)malloc(sizeof(int));
    printf("test_malloc_ins_2 fun_val addr  = 0x%08x \r\n",fun_val);
    * pointer = fun_val;
}

int main()
{
	int *main_test;
    printf("============测试1,函数返回值=============== \r\n");
    main_test = test_malloc_ins();
    printf(" main_test addr  = 0x%08x \r\n",main_test);
    printf("**** free ***** \r\n");
    free(main_test);
    main_test = NULL;
    printf("after free main main_test addr  = 0x%08x \r\n",main_test);

    printf("\r\n");
    printf("\r\n");
    printf("\r\n");

    printf("============测试2,函数不带返回值:二级指针法=============== \r\n");
    int *p = NULL;
    test_malloc_ins_2(&p);
    printf("*p  = 0x%08x \r\n",p);
    free(p);
    p = NULL;
    printf("after free  ,*p  = 0x%08x \r\n",p);
}

2. 实验结果

【嵌入式软件C编程】主函数free子函数malloc地址的两种方式以及注意事项_第1张图片

3. 原理介绍

C/C++中在子函数中使用malloc分配内存和free释放内存的方法

你可能感兴趣的:(嵌入式,c语言,开发语言,嵌入式C)