内存管理—内存申请和释放问题

2019-10-16 02:15发布

下面是我写的程序,程序运行正常 ,但是我把内存占用率打印出来的时候,显示的如下图所示    ,多次进入函数也占用率也不会一直增加,但是释放之后显示的内存占用率不会归0,请问是怎么回事呢?大神帮我看看,






stringgui_switchpower_Etemp=mymalloc(220);                // 申请200字节
USART5_printf("%02d% " ,mem_perused());//查看内存占用率
stringgui_switchpower_Etemp_1=mymalloc(220);        //         申请200字节
USART5_printf("%02d% " ,mem_perused());
if((stringgui_switchpower_Etemp!=NULL)&&(stringgui_switchpower_Etemp_1!=NULL))
{          
         uint8_t *stringgui_switchpower_E=0;
        uint8_t *stringgui_switchpower_E_1=0;
        stringgui_switchpower_E_1=stringgui_switchpower_Etemp_1;
         memset(stringgui_switchpower_Etemp_1, 0, sizeof(int)*220);
        stringgui_switchpower_E=stringgui_switchpower_Etemp;
         memset(stringgui_switchpower_Etemp, 0, sizeof(int)*220);
                                          
          for(i=0;i<16;i++)               
        {
                 if(Count_error<11)
                 {
                          for(m=0;m<7;m++)
                         {                                               
                                if(2249+m+7*i==2251+7*i)
                                {       
                                        sprintf((char*)stringgui_switchpower_E,"%s/%02X",(char*)stringgui_switchpower_E, ReadByte(2249+m+7*i));
                                        m++;
                                }
                               if(2249+m+7*i==2253+7*i)
                                {
                                        sprintf((char*)stringgui_switchpower_E,"%s:%02X",(char*)stringgui_switchpower_E, ReadByte(2249+m+7*i));
                                        m++;
                                }
                                        sprintf((char*)stringgui_switchpower_E,"%s %02X",(char*)stringgui_switchpower_E, ReadByte(2249+m+7*i));
                        }
                                  Count_error++;
                  }                 
         else
         {  
             for(m=0;m<7;m++)
            {
                        if(2249+m+7*i==2251+7*i)
                        {       
                                sprintf((char*)stringgui_switchpower_E_1,"%s/%02X",(char*)stringgui_switchpower_E_1, ReadByte(2249+m+7*i));
                                m++;
                        }
                        if(2249+m+7*i==2253+7*i)
                        {
                                sprintf((char*)stringgui_switchpower_E_1,"%s:%02X",(char*)stringgui_switchpower_E_1, ReadByte(2249+m+7*i));
                                 m++;
                        }
                        sprintf((char*)stringgui_switchpower_E_1,"%s %02X",(char*)stringgui_switchpower_E_1, ReadByte(2249+m+7*i));      
                 }
                        Count_error++;
         }               
  }
                                         
                  WritePic_GUI(0x4125,(char*)stringgui_switchpower_E_1);
                 stringgui_switchpower_E_1=0;       
                myfree(stringgui_switchpower_Etemp_1);        //释放内存
         stringgui_switchpower_Etemp_1=0;                //指向空地址
        USART5_printf("%02d% " ,mem_perused());        //查看内存占用率
              WritePic_GUI(0x4000,(char*)stringgui_switchpower_E);
                   stringgui_switchpower_E=0;
                    myfree(stringgui_switchpower_Etemp);        //释放内存
                   stringgui_switchpower_Etemp=0;                //指向空地址         
                   USART5_printf("%02d% " ,mem_perused());        //查看内存占用率                                                                          
        }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。