免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: huxk
打印 上一主题 下一主题

达人们进来 帮忙分析一下 这样搞会有怎样的后果 【呼叫 滑铁卢兄等 来帮个忙吧】 [复制链接]

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
11 [报告]
发表于 2010-12-28 18:15 |只看该作者
出什么问题了?
和ls一样core了?
还是strlen的结果的输出和预期不符合?
是64位么?

论坛徽章:
0
12 [报告]
发表于 2010-12-28 18:21 |只看该作者
是的。不过是%d,程序应该不至于崩溃
hellioncu 发表于 2010-12-28 13:14



    这个不好说,也许读到不能读的,一样会core

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
13 [报告]
发表于 2010-12-28 18:24 |只看该作者
奇葩了……
gcc3就是最后一个输出不对, gcc4在编译时(还没有运行)就core了……

论坛徽章:
0
14 [报告]
发表于 2010-12-28 19:00 |只看该作者
回复 13# OwnWaterloo


    这个程序跑了一年多了 今天才出这个问题 程序也没core掉 进程还在的 是一个从消息队列接收消息读端 发送端发送了 但是 这个程序今天有一会就突然不接收消息了

日志就定位在类似 我给出的那个 printf上 再不往下走了 我怀疑是这个问题 请帮忙分析下

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
15 [报告]
发表于 2010-12-28 19:04 |只看该作者
回复 14# huxk

我也不知道……

你先改成:
printf("%s %lu", s, (unsigned long)strlen(s) );
看看?
(如果支持c99的话, 好像有一个用于size_t的, %z?)
如果是64位, 而且是strlen的结果不符, 应该就是这个问题。


如果这没问题了, 再改成:
printf("%s %lu %d", s, (unsigned long)strlen(s) );

要出了问题, 我也没辙……

论坛徽章:
0
16 [报告]
发表于 2010-12-28 19:09 |只看该作者
本帖最后由 huxk 于 2010-12-28 19:12 编辑

回复 15# OwnWaterloo


    是 32 位的 我想知道 这个 printf 应该是按 全面指导的格式串 在一个缓冲区中按相应数据类型 的长度 逐个操作的 是么

那 最后那个 %d 到底往哪里去读数据了?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
17 [报告]
发表于 2010-12-28 19:12 |只看该作者
回复 16# huxk

不懂……

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
18 [报告]
发表于 2010-12-28 19:30 |只看该作者
回复  OwnWaterloo


    是 32 位的 我想知道 这个 printf 应该是按 全面指导的格式串 在一个缓冲区中 ...
huxk 发表于 2010-12-28 19:09



    不好说。
可能是上级栈帧里的某个变量
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP