BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #39342同步于 2010/9/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

内存申请失败该怎么处理啊

jiangj
2010/9/30镜像同步15 回复
下面是部分代码: WD_DMA g_dmaB; ... ... ... dwStatus = WD_DMALock(hDEMO->hWD,&g_dmaB); if (dwStatus) { DEBUG_PRINTF("Could not lock down buffer\n"); return FALSE; } 我申请的内存大小是2块4M内存,前面有个g_dmaA申请很容易成功,但申请g_dmaB的内存就总是失败(只有刚重启机器的时候会成功)。 调用Windriver的函数WD_DMALock来申请内存。 WD_DMALock返回值非0则表示内存申请失败,那如果失败以后我应该怎么去处理?现在失败后直接返回的话程序运行就不正常了。 PS:内存申请失败的原因是什么? 求大牛救命!!!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
zxsword机器人#1 · 2010/9/30
内存耗尽?看代码,猜嵌入式开发。。。内存够大不? 唔,我猜,可能是这样的,之前的申请的某内存块(设为A),对这个块A的读写超出了块A的大小,破坏了malloc函数库例程内部使用的一些数据结构,而这就很可能导致之后malloc调用失败。 建议检查一下之前的调用。 菜鸟帮顶~
jiangj机器人#2 · 2010/9/30
内存应该没用完,看了下,还剩200+M的内存没用.... dmalock这个函数要求分配的是一段连续的内存,不知道为什么有200+M的余量,但就是申请失败 【 在 zxsword 的大作中提到: 】 : 内存耗尽?看代码,猜嵌入式开发。。。内存够大不? : 唔,我猜,可能是这样的,之前的申请的某内存块(设为A),对这个块A的读写超出了块A的大小,破坏了malloc函数库例程内部使用的一些数据结构,而这就很可能导致之后malloc调用失败。 建议检查一下之前的调用。 : 菜鸟帮顶~
zxsword机器人#3 · 2010/9/30
要不,试下连续申请,先申请第一个块,紧接着申请第二个块=。= 看能成功不能?如果能的话,那就该检查一下,申请第一个块之后,使用第一个块的代码了 malloc库例程维护内部的空闲内存块链表什么的,可能是因为写超出了第一个内存块,然后导致malloc内部维护的数据结构的损坏,我只能想到这个了。。。 【 在 jiangj 的大作中提到: 】 : 内存应该没用完,看了下,还剩200+M的内存没用.... : dmalock这个函数要求分配的是一段连续的内存,不知道为什么有200+M的余量,但就是申请失败 : 【 在 zxsword 的大作中提到: 】 : ...................
FadeToBlack机器人#4 · 2010/10/7
内存碎片太多了,没有足够的连续内存?
jiangj机器人#5 · 2010/10/7
现在只能这样猜测..... 但就算是碎片太多,该怎么去处理还是不知道... 【 在 FadeToBlack 的大作中提到: 】 : 内存碎片太多了,没有足够的连续内存?
FadeToBlack机器人#6 · 2010/10/7
re...回复的帖子没保存丢了.... 先写个allocator确认一下碎片问题,查看一下申请失败时的内存使用情况,同时确认不是因为内存越界写坏了allocator中的结构导致出错 如果确认是碎片问题,合并小块内存申请或改为使用栈空间;如果rtl提供memory compact功能就更简单一些
jiangj机器人#7 · 2010/10/7
申请内存用的函数 是 用 windriver上面封装好的函数....不知道他上面是怎么去申请的啊 【 在 FadeToBlack 的大作中提到: 】 : re...回复的帖子没保存丢了.... : 先写个allocator确认一下碎片问题,查看一下申请失败时的内存使用情况,同时确认不是因为内存越界写坏了allocator中的结构导致出错 : 如果确认是碎片问题,合并小块内存申请或改为使用栈空间;如果rtl提供memory compact功能就更简单一些
FadeToBlack机器人#8 · 2010/10/7
再mangle一层呗 【 在 jiangj 的大作中提到: 】 : 申请内存用的函数 是 用 windriver上面封装好的函数....不知道他上面是怎么去申请的啊 : 【 在 FadeToBlack 的大作中提到: 】 : : re...回复的帖子没保存丢了.... : ...................
FadeToBlack机器人#9 · 2010/10/7
如果你是指windriver提供的lib里的接口内部申请内存出错……在调用前检查内存使用情况,这个应该做得到吧