本文主要是介绍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??
修改后代码:
这篇关于free函数的纠结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!