zoukankan      html  css  js  c++  java
  • [trouble shoot]atol和atoll

    就终于的结果来看,事实上就是一个小的错误。

    但定位错误的时间比較漫长了。。

    背景:出错的代码是 一段执行在 linux server上的程序,程序的主要功能是处理银行pos刷卡记录并做一些计算。最后汇总、格式化输出。

    该公司是和银行打交道的。接的项目都是银行的。


    来公司的第二天(第一天熟悉环境,啥也没干)老板就给了我一个2000多行的纯c程序,一个測试出错的測试文档 和 出错的输出结果。

    因为历史的原因。。。。。

    该段程序经过多人的补补修修,一个没有头文件。木有代码复用,2000多行的一个主文件。

    。。

    。。

    加上我是刚来的不懂业务知识。连測试用例都看不懂,像是在看天书。

    我试着用vs打开程序,我靠,无法在windows下执行,里面调用的非常多linux系统中的库函数。

    。。

    还好我会linux。我windows下装有cygwin。窃喜。。

    。。

    程序执行环境不是问题了,也能够正常执行。我就開始追踪bug吧。我也不知道哪里有错误啊,我不懂业务知识。也不知道正确结果是啥啊。

    。。果断去问老板,哪里结果不多了。。。。

    好了。知道哪里出错了。接下来就是定位它了。在vim下看代码。还是不错的,就当再熟悉熟悉vim了,发现代码里的变量名 还有函数名我都看不懂啊,发现做程序猿业务知识不能不懂啊。

    硬着头皮啃吧,


    找到了一些和错误信息相关的变量了,就開始gdb调试了。

    。。

    。。。。

    。。

    。。

    。。

    终于锁定了问题的出错地点:atol函数。

    。。哈哈 。

    该段程序就是处理 的数据 都是 从银行 获取的, 比方pos卡消费信息。。。里面都是大数,atol()函数仅仅支持8位啊,换成atoll()就好拉。。

    。。

    总结:

    溢出不会程序不会报错,仅仅会导致结果不对,一定要注意溢出,接受这次的教训

  • 相关阅读:
    STL unique使用问题
    自定义使用动态内存的类模板
    自定义类模板 重载<<遇到的问题
    [HDU 1882]--Strange Billboard(位运算+枚举)
    动态规划---最长上升子序列问题(O(nlogn),O(n^2))
    由结构体成员地址计算结构体地址——list_entry()原理详解
    不同意义的new和delete
    new[] 到底做了什么?
    lambda表达式与bind函数
    C++之可调用对象
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7383935.html
Copyright © 2011-2022 走看看