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));
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
info 和rcd为两个结构体,局部临时变量。由于中间一个memcpy拷贝长度错了,造成其他变量值改变,具体改变情况和CPU构架大小端相关,在POWER CPU上面不出问题纯属侥幸。
memcpy造成其他变量值改变的更多相关文章
- python中变量值改变地址也会跟着改变
先上图. 图里,分别用三个整数进行了验证.可以发现当a和b值相同时,a与b地址也一致.改变a的值,a的地址也跟着改变了. 原因 python的宗旨之一,万物皆对象.(单身狗狂喜) 而对象又被分为可变对 ...
- 动态修改 NodeJS 程序中的变量值
如果一个 NodeJS 进程正在运行,有办法修改程序中的变量值么?答案是:通过 V8 的 Debugger 接口可以!本文将详细介绍实现步骤. 启动一个 HTTP Server 用简单的 Hello ...
- JavaScript交换两个变量值的七种解决方案
前言 这篇文章总结了七种办法来交换a和b的变量值 1 2 var a = 123; var b = 456; 交换变量值方案一 最最最简单的办法就是使用一个临时变量了,不过使用临时变量的方法实在是太l ...
- Java反射-修改private final成员变量值,你知道多少?
大家都知道使用java反射可以在运行时动态改变对象的行为,甚至是private final的成员变量,但并不是所有情况下,都可以修改成员变量.今天就举几个小例子说明. 基本数据类型 String类型 ...
- ORACLE获取SQL绑定变量值的方法总结
本文总结一下ORACLE数据库中如何获取SQL绑定变量值的方法,在SQL优化调优过程中,经常会用到这方面的知识点.在此梳理.总结一下,方面日后查找.翻阅. 方法1:查询V$SQL V$SQL视图中 ...
- IDEA在debug时修改变量值
IDEA在debug调试时修改变量值 例如以下代码: int y1 = 0; anchor.setDy1(y1); 在代码中,这个y1永远是0,但是y1本身是个变量 debug的时候获取到这个属性,并 ...
- 理解JavaScript变量值
JavaScript变量可能包含两种不同数据类型的值:基本类型值和引用类型值.基本类型值指的是简单的数据段,而引用类型值是指那些可能由多个值构成的对象. 在将一个值赋给变量时,解析器必须确定这个值是基 ...
- js复制变量值
来源:JavaScript高级程序设计(第3版)69页. 例如 : var a=1; var b = a ; 这里就是把a的值复制给变量 b 了. 但是 复制的变量值 分为 ...
- $ORACLE_HOME变量值末尾多“/”惹的祸
之前一直误以为$ORACLE_HOME变量的路径中末尾多写一个"/"不会有影响. 今天做实验时碰到一个情景,发现并不是这样. 环境:OEL 5.7 + Oracle 10.2.0. ...
随机推荐
- 《Linear Algebra and Its Applications》-chaper2-矩阵的逆
矩阵的逆: 逆矩阵的定义: 类比于我们在研究实数的时候回去讨论一个数的倒数,对应的,在矩阵运算中,当AB = I的时候,A,B互称为逆矩阵,这里的I类似实数中的1,表示单位矩阵,即对角线是1其余位置是 ...
- foreach as 和 in_array
1.$arr = array("one", "two", "three"); foreach ($arr as $value) { echo ...
- ECLIPSE/MYECLIPSE OPERATES
Eclipse相关操作 1.删除所有注释 1.eclipse删除所有注释 Ctrl+F: /\*{1,2}[\s\S]*?\*/ 选择正则表达式,替换全部即可.
- 真正菜鸟用教程之WQSG Scrip Export WQSG (脚本导出导入工具,PSP、NDS汉化必备 )
先扫盲WQSG是干什么用的 一些掌机类游戏汉化比方PSP NDS 汉化必备之物 它能够依据字典转换文本 假设你不知道这是啥玩意,快去充电染成茜色的坂道 文本提取(导出)方法 (下文称导出文章) 在导出 ...
- UITableView显示不全
先上图(不全图片): 正确图片: 原因例如以下: 1.在tableView的父视图的freme问题. 2.tableView本身的frame问题.大小依据自己的实际情况改过来就OK了 希望能够帮助到你 ...
- [转] linux 信号量之SIGNAL
我们可以使用kill -l查看所有的信号量解释,但是没有看到SIGNAL 0的解释. [root@testdb~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) ...
- redis 本机链接服务端命令
在windows 本机链接服务端redis,需要下载windows 端的redis: 1,运行redis-server.exe程序:2,打开cmd 控制台3,执行命令 D:\redis64\redis ...
- css02基本选择器
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- C#关于使用枚举遇到的问题----Parse()方法使用注意
声明了一个枚举 public enum ceshimeiju { 跃动,光子} ceshimeiju ce = Enum.Parse(typeof(ceshimeiju ), "跃动&quo ...
- ASP.NET-FineUI开发实践-2
FineUI好处之一在于No JS,这里的No JS并不是不使用JS,JS对于ASP.Net是必不可少的,只是FineUI把大部分JS封装,如果想用,后台提供了很多方法返回JS,Get...Refer ...