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上面不出问题纯属侥幸。

  • 相关阅读:
    linux端口开放指定端口的两种方法
    关于JqueryCheck选中获取数据
    ASP.NET MVC 简单分页代码
    ASP.NET MVC4分页Site.CSS
    SQL索引的优缺点
    SQL字段数据类型小技巧
    数据库强制完整性的机制
    WinFrom饼形图
    WinFrom折线图
    WinFrom柱形图
  • 原文地址:https://www.cnblogs.com/imlgc/p/3653685.html
Copyright © 2011-2022 走看看