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

  • 相关阅读:
    基于STM32F103C8T6的超声波测距示例
    ST-LINK 到 SWD接线图
    MDK破解版下载
    CompletableFuture Quasar 等并发编程
    c++中参数传递和函数返回简析
    c++中冒号(:)和双冒号(::)的用法
    c++中,size_typt, size_t, ptrdiff_t 简介
    c++中,保证头文件只被编译一次,避免多重包含的方法
    时间序列分析之一次指数平滑法
    Openv2.1基本数据类型
  • 原文地址:https://www.cnblogs.com/imlgc/p/3653685.html
Copyright © 2011-2022 走看看