关于malloc使用经历

来源:互联网 发布:unity3d特效包下载 编辑:程序博客网 时间:2024/06/06 03:13

今天在写一个MCU的代码,遇到问题之前我是这样理解的:

1、在一个函数中,我申请了一段内存空间如下所示:

void Fun_1()

      uint8 *temp = (uint8 *)malloc(20*sizeof(uint8));

      ......

}

我的理解

我定义的指针是局部变量,在Fun_1被调用结束后,temp指向的这一片内存空间会自动被释放。程序运行起来后,MCU工作正常,到此问我感觉我的理解是对的,但是google了一下malloc的相关问题:


网络上的分析:

malloc出来的空间是在堆中,要你自己释放,除非程序退出,不然不会释放函数里的局部变量非malloc出来的都是在栈中,有系统管理,在函数执行完后就清理了。所以malloc分配的,你要自己写free...free完后在把指针赋值NULL。


我的反思:

按照上述分析,我发现我的理解好像是有问题的。因为MCU执行程序是不会退出的,一直是for(;;),那么也就是说我申请的内存空间是没有被free的,但是为什么我的程序没有挂死,还一直正常在跑呢?


我的疑问:

空间在堆中,和栈中,要如何理解?


2、在另一个函数中,我又申请了一段内存空间如下所示:

uint8  *Fun_2()

{

uint8 *temp = (uint8 *)malloc(20*sizeof(uint8));

   ......

           return temp;

}


然后我在Fun_1中调用Fun_2,就出问题了:

void Fun_1()

{

    uint8 *temp = (uint8 *)malloc(20*sizeof(uint8));

      ......

     temp = Fun_2();

}

程序运行了不到1min钟,就挂死了,MCU重启恢复正常,malloc的使用肯定出问题了,但是和Fun_1比较,Fun_2又带来了什么不同的影响呢?



0 0
原创粉丝点击