zoukankan      html  css  js  c++  java
  • memcpy造成其他变量值改变

        以前C/C++遇到过很多很多的问题,有时候费了很久很久时间,很大很大的努力才解决。但是都没有记录下来,现在想想以前的遇到的问题,只知道这样的事情发生过,至于是什么问题,一点印象都没有了。所以遇到奇怪的问题,还是记录下来靠谱点。

        背景:

        使用OTL访问ORACLE数据库,在POWER CPU 64位LINUX上面程序看起来运行没有什么异常情况。移植到X86构架的CPU 64位LINUX上面,却发现某条SQL无法执行。初步分析后(分析错误),发觉执行某条SQL后,某变量值莫名其妙变了。发邮件问OTL作者,作者看得也不是很仔细,一时也发现不了什么问题。

        最后继续看几次代码,发现还是自己程序的问题:

        具体如下:

    wrong:
     
    memcpy(info.usr_name, u_info.usr_name, sizeof(info.usr_name));
     
    memcpy(info.usr_no, u_info.usr_num, sizeof(info.usr_name));
     
    memcpy(info.bank_acct, rcd.bank_acct, sizeof(info.bank_acct));
     
    correct:
     
    memcpy(info.usr_name, u_info.usr_name, sizeof(info.usr_name));
     
    memcpy(info.usr_no, u_info.usr_num, sizeof(info.usr_no));
     
    memcpy(info.bank_acct, rcd.bank_acct, sizeof(info.bank_acct));

        info 和rcd为两个结构体,局部临时变量。由于中间一个memcpy拷贝长度错了,造成其他变量值改变,具体改变情况和CPU构架大小端相关,在POWER CPU上面不出问题纯属侥幸。

  • 相关阅读:
    消息中间件的研究(二) RabbitMQ应用场景分析
    消息中间件的研究 (一)
    35. 搜索插入位置
    374. 猜数字大小
    278. 第一个错误的版本
    367. 有效的完全平方数
    1.Storm概述简介
    7.MapReduce操作Hbase
    6.Hbase 原理
    5.Hbase API 操作开发
  • 原文地址:https://www.cnblogs.com/imlgc/p/3653685.html
Copyright © 2011-2022 走看看