free函数的纠结

昨天想要将ARM9板上flash中的jpg图片显示在tft上,

 

在改写一个函数时,

使用malloc函数分配了一段内存,

来存储我读取的图片内容,

在显示到tft上后,

调用free函数释放,

结果发现总会出现segmentation fault。

一直不理解原因出现在哪里,

代码如下

 

然后开始了寻找错误的征程。

 

于是一堆printf()出现在代码里,

当发现很多都正常输出时,

范围也就越来越小了,

最后发现,

打印不出来的竟然是free函数之后的那个printf()。

 

于是错误被锁定,

就在free上,

但一直没有想明白,

我分配了,

也是释放了,为什么还会出现内存错误。

在网上也找了,没有发现合适的,

找到一个添加malloc.h 的方案,

但也于事无补,

 

后来突然想到在一次看算法的代码时,他们都有两个指针,

在使用后,再重新赋值。

就和这里一样,

我使用后,指针的位置在它的结尾,已不再起始位置,

所以开始时可能不会有什么错误,因为内存还大,

但是到最后,内存不够用时,

再释放已没有空间,

所以出现segmentation fault。

 

于是将代码中添加了一个

__u16 * pic_lod = pic;

 

在操作完后,

再pic= pic_oid;

之后在释放,

没有出现问题。

注: 对于指针操作后,

指向位置变化的说明在最初学C时,

已有介绍,

然因为平时用的少,

竟至遗忘,

实不应该。

但保留一个疑问,

对于全局指针变量为什么不用这样操作,

即操作后其起始位置没有发生变化,

而是可以直接free??

 

修改后代码:

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值