免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1400 | 回复: 0
打印 上一主题 下一主题

[Linux] 求救~~ C函数中形参的异常变化 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-15 11:30 |只看该作者 |倒序浏览
本帖最后由 denry39 于 2013-10-15 11:29 编辑

Arch:  ARM-LINUX

在我的源程序中有:
  1. static int *buf_pointer[NUM_BUF];
  2. if(MAP_FAILED == (buf_pointer[i] = mmap(.......))
  3. ........
  4. // 断点设置点
  5. if(v4lconvert_convert(lib, &src_fmt, &dst_fmt, (void*)buf_pointer[cam_buf.index],
  6.                 cam_buf.length, current_pic.buffer, YUV420_size) <= 0)
复制代码
in libv4lconvert.c(库函数)

  1. 947 int v4lconvert_convert(struct v4lconvert_data *data,
  2. 948   const struct v4l2_format *src_fmt,  /* in */
  3. 949   const struct v4l2_format *dest_fmt, /* in */
  4. 950   unsigned char *src, int src_size, unsigned char *dest, int dest_size)
  5. 951 {
  6. 952   int res, dest_needed, temp_needed, processing, convert = 0;
  7. 953   int rotate90, vflip, hflip, crop;
  8. 954   unsigned char *convert1_dest = dest;
  9. 955   int convert1_dest_size = dest_size;
  10. 956   unsigned char *convert2_src = src, *convert2_dest = dest;
  11. 957   int convert2_dest_size = dest_size;
  12. 958   unsigned char *rotate90_src = src, *rotate90_dest = dest;
  13. 959   unsigned char *flip_src = src, *flip_dest = dest;
  14. 960   unsigned char *crop_src = src;
  15. 961   struct v4l2_format my_src_fmt = *src_fmt;   //问题代码
  16. 962   struct v4l2_format my_dest_fmt = *dest_fmt;
复制代码
GDB调试:
  1. (gdb) b v4lconvert_convert   //设置断点
  2. (gdb) r
  3. Breakpoint 1, v4lconvert_convert (data=0x19008, src_fmt=0x189b8,
  4.     dest_fmt=0x188ec, src=0x4042b000 <Address 0x4042b000 out of bounds>,
  5.     src_size=0, dest=0x40895008 "", dest_size=460800) at libv4lconvert.c:1004
  6. 1004    libv4lconvert.c: No such file or directory.
  7.         in libv4lconvert.c
  8. (gdb) n
  9. 951     in libv4lconvert.c
  10. (gdb) n
  11. 961     in libv4lconvert.c
  12. (gdb) bt
  13. #0  v4lconvert_convert (data=0x19008, src_fmt=0x189b8, dest_fmt=0x188ec,
  14.     src=0x4042b000 <Address 0x4042b000 out of bounds>, src_size=0,
  15.     dest=0x40895008 "", dest_size=460800) at libv4lconvert.c:961
  16. #1  0x000096e8 in camera_get_frame (pic=0xbefffc58) at camera.c:181
  17. #2  0x00009fd4 in main () at main.c:56
  18. (gdb) p src
  19. $7 = (unsigned char *) 0x4042b000 <Address 0x4042b000 out of bounds>
  20. (gdb) n
  21. 962     in libv4lconvert.c
  22. (gdb) p src
  23. $8 = (unsigned char *) 0x189b8 "\001"   //src 值改变
  24. (gdb) bt
  25. #0  v4lconvert_convert (data=0x19008, src_fmt=0x0, dest_fmt=0x188ec,
  26.     src=0x189b8 "\001", src_size=0, dest=0x40895008 "", dest_size=460800)
  27.     at libv4lconvert.c:962      //src_fmt,  src均改变
  28. #1  0x000096e8 in camera_get_frame (pic=0xbefffc58) at camera.c:181
  29. #2  0x00009fd4 in main () at main.c:56
  30. (gdb)
复制代码
问题:
1. mmap并没有出错,返回的地址在函数调用中怎么会"out of bounds”
2. 在执行了v4lconvert_convert的第961行后,函数的src_fmt,src形参值怎么会发生变化,不解呀。请高人指教。。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP