SouthPower 发表于 2009-8-26 14:57:51

如何释放掉创建的动态数组

各位同仁帮帮忙,我在IAR下面写了一个需要利用动态数组存储数据的程序,存储发送完毕后再把动态数组释放掉。程序如下:

#define Key1P26
#define Key2P25
unsigned char *dynamic_p1 =NULL;
void main(void)
{
unsigned char i,*dyn_p,*dyn_p1;
unsigned int j;
WDTE=0;
Clock_inital();//---------------时钟模块初始话
ADPC0=0X08;//-------------------置P2口为IO口
PM26=1;
PM25=1;
__enable_interrupt();//---------中断使能
dynamic_p1=(unsigned char *)malloc(6);//
   while(1)
      {
         if(Key1==0)
            for(j=0;j<65000;j++);
            if(Key1==0)
               {
                  dyn_p= dynamic_p1;
                  for(i=0;i<10;i++)
                     {
                     *dyn_p=GPRS_send_data;
                        dyn_p++;
                     }
                                 
               }
         
         if(Key2==0)
            for(j=0;j<65000;j++);
            if(Key2==0)
               {
                  free(dynamic_p1);
                  }
         }
}
现在存在的问题是,可以把数据存入指针dynamic_p1指向的地址空间,但是在按Key2键后程序执行free(dynmaic_p1)语句后,先前dynamic_p1指向的空间里的数据没有释放掉,free函数没有起作用,为什么?还是我free函数用错了?那位比较熟悉的师兄指点一下,不胜感激!

jdjsxf 发表于 2009-8-27 09:35:59

你是怎么判断空间里的数据没释放掉的。
这个应该是释放空间吧,数据还会保持阿,除非后面把这块空间改掉了。
我也没试过,不过感觉好像是这样。

SouthPower 发表于 2009-8-27 13:34:15

问题解决了,空间时释放掉了,但是释放掉的空间在没有重新被引用时,先前存储的数据还在里面。它占用的是存储器里面的“堆”区域。我把释放空间和空间里的数据是否被释放掉搞混淆了。

snowyghost 发表于 2009-8-28 21:00:16

学习了。

zhw0383 发表于 2009-10-24 11:53:47

学习下 。。。。

hwg_LDW 发表于 2011-11-25 22:42:35

动态申请内存,学习了

chhaich 发表于 2012-2-24 10:53:12

动态申请内存有一个函数是自动把申请到的空间清零的,不过释放函数就没有。
页: [1]
查看完整版本: 如何释放掉创建的动态数组