malloc申请内存失败_判断malloc是否成功

malloc申请内存失败_判断malloc是否成功malloc函数分配内存失败的原因及解决方法先说结论函数分配内存失败的原因:1. 内存不足。2. 在前面的程序中出现了内存的越界访问,导致分配函数所涉及的一些信息被破坏。下次再使用函数申请

malloc函数分配内存失败的原因及解决方法   先说结论   函数分配内存失败的原因:   1. 内存不足。   2. 在前面的程序中出现了内存的越界访问,导致分配函数所涉及的一些信息被破坏。下次再使用函数申请内存就会失败,返回空指针。   解决方法:   1.在STM32中堆空间内存不足的解决方法可以参考我上一篇文章   STM32分配堆栈空间不足问题原因及解决方法 http://blog.csdn.net/lighthear/article/details/69485942   2.从不能分配的那个函数开始,往回找最近的那个能分配的函数,出问题的代码应该就在这部分,很可能的原因就是指针越界,对未知的内存进行了操作,导致了不能继续分配内存。   遇到的问题   最近遇到STM32创建链表时,第一次运行正常,第二次无法正常创建的问题。在线调试发现是函数没有分配到内存,但是我之前已经调大过内存空间了,不应该存在小数据也内存不足的情况。   解决方法   刚开始以为是由于第一次运行后的释放内存操作没有正常执行,导致浪费过多内存空间产生内存不足,尝试了多种方式重写释放的函数,也查阅了函数的用法,证明使用方式正确。问题未解决   后来猜测由于指针变量释放后没有指向,造成了野指针的情况。但是所有指针变量均为局部变量,程序执行结束之后会自动释放,并不会对下次造成影响。问题未解决   查阅网上的资料发现,内存分配失败的原因,除了内存不足,还可能是之前产生了内存指针越界。   函数分配内存失败的原因:   1. 内存不足。   2. 在前面的程序中出现了内存的越界访问,导致分配函数所涉及的一些信息被破坏。下次再使用函数申请内存就会失败,返回空指针。   在这个思想指导下,往前逐个查找可能发生指针越界的函数   12345678910   发现,声明的为类型的指针,由于的第三个参数提示需要类型的变量,因此对做了强制类型转换,从变为了。虽然对于来说,内存空间没变(都为指针,32位系统分配4字节),但是对于编译器来说,所指向数据的含义就从扩大到了,之后通过指针遍历访问,对数组进行更改就会造成指针越界,更改到未分配的区域。因此下次再使用函数申请内存就会失败,返回空指针。   因此将干脆将直接定义成类型的变量,并按照类型分配空间,而不进行强制类型转换。这样就可避免指针越界的情况。测试发现问题不再发生。问题解决   总结   如果下一次再碰到这样的问题,就从不能分配的那个函数开始,往回找最近的那个能分配的函数,出问题的代码应该就在这部分,很可能的原因就是指针越界,对未知的内存进行了操作,导致了不能继续分配内存。   因此以后对指针的操作一定要万分小心,防止指针越界问题的发生。   参考文章:   1. malloc函数申请内存失败,返回空NULL(0):http://blog.csdn.net/gadflycq/article/details/40752373   2. 在内存充足时malloc函数分配内存失败的原因及解决:http://blog.sina.com.cn/s/blog_71d3b5480100lxcx.html   转载地址: http://blog.csdn.net/lighthear/article/details/70146602

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/62941.html

(0)
上一篇 2024年 8月 28日 下午1:10
下一篇 2024年 8月 28日 下午1:14

相关推荐

关注微信