让人崩溃的问题

qys2008 2008-03-31 11:34:23
vxworks(disable MMU)程序运行到malloc(1024*1024*5)时,出错:
machine check
program counter: 0x793360
machine status: 0x4b000
8286f4 vxTaskEntry +60 : 324ec ([])
722f88 wBufferMemInit+40 : malloc ([])
793444 malloc +1c : memPartAlloc ([])
792e34 memPartAlloc +6c : memPartAlignedAlloc ([])
792c5c memPartAlignedAlloc+19c: 7932a4 ([])
改为malloc(1024*500)以内,正确!
改为malloc(1024*1024*10),也正确!
改为malloc(1024*1024*6),出错!

什么原因呢?

...全文
326 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
adamgame 2008-04-03
  • 打赏
  • 举报
回复
这个明显是内存操作异常。具体的说是操作系统仲裁了你对某块内存的操作的非法性,或者说你访问了操作系统认为是非法的区域。
从调用栈的输出来看问题出在memPartAlignedAlloc内。
具体原因等我看看memPartAlignedAlloc的源码再做分析。
目前来看,有点像是VXWORKS的堆管理存在BUG?不过也不排除硬件设计问题对此处的影响。
qys2008 2008-04-02
  • 打赏
  • 举报
回复
是啊,怀疑是内存不够了,准备更改硬件设计了。
helenhf 2008-04-02
  • 打赏
  • 举报
回复
真崩溃~
是不是硬件有问题啊?
换个硬件跑一下试试
qys2008 2008-04-02
  • 打赏
  • 举报
回复
i<10就出错了。
又发现一个现象:先来一个p = malloc(1024*1024*10);不释放p,紧接着运行:
for(; i > 0; i--)
{
printf("malloc %d...\n", i);
p = malloc(1024*1024*i);
printf("free %d...\n", i);
free(p);
}
结果全OK. 怪哉!?
yangb2014# 2008-04-01
  • 打赏
  • 举报
回复
分配内存失败,
helenhf 2008-04-01
  • 打赏
  • 举报
回复
邪了门了
malloc(1024*1024*10)正确
malloc(1024*1024*5)/malloc(1024*1024*6)反而出错?
跑一下这个看看~


int i = 10;
void *p;
for(; i > 0; i--)
{
printf("malloc %d...\n", i);
p = malloc(1024*1024*i);
printf("free %d...\n", i);
free(p);
}
发帖
VxWorks

2156

社区成员

xworks是美国 Wind River System 公司( 以下简称风河公司 ,即 WRS 公司)推出的一个实时操作系统。
社区管理员
  • VxWorks开发社区
加入社区
帖子事件
创建了帖子
2008-03-31 11:34
社区公告
暂无公告