免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ckf513728912
打印 上一主题 下一主题

[函数] memcpy 段错误问题 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2011-07-11 17:34 |只看该作者
你的data是unsigned char类型的,却要copy16个字节。

论坛徽章:
0
22 [报告]
发表于 2011-07-11 17:36 |只看该作者
晕,下面是的贴是这样定义的,上面说错 了。

论坛徽章:
0
23 [报告]
发表于 2011-07-11 17:49 |只看该作者
不管32位还是64位操作系统,char都是8bit的,所以用char应该不会出错的,可能有其他地方弄错了吧

论坛徽章:
13
巨蟹座
日期:2013-10-30 18:29:4115-16赛季CBA联赛之青岛
日期:2019-01-04 17:30:1015-16赛季CBA联赛之天津
日期:2016-03-08 10:30:1715-16赛季CBA联赛之天津
日期:2015-12-10 15:56:452015年亚洲杯之约旦
日期:2015-03-09 16:29:36双鱼座
日期:2014-11-27 17:17:20寅虎
日期:2014-11-18 13:55:12双子座
日期:2014-03-31 15:41:32狮子座
日期:2014-03-14 11:23:24狮子座
日期:2014-02-19 16:30:12午马
日期:2013-11-04 23:22:31卯兔
日期:2013-10-30 19:51:15
24 [报告]
发表于 2011-07-11 18:24 |只看该作者
本帖最后由 ckf513728912 于 2011-07-11 18:27 编辑

回复 23# liexusong

我在接着跟踪下去在这个模块有问题,在for循环里
    BOOL Decrypt(unsigned char* pInData, unsigned char* pOutData, int lenData, unsigned char* pcontext)  {
        int i;   
         unsigned char keybuf[24];
        memcpy(keybuf, pcontext, 16);            //
        memcpy(keybuf+16, pcontext, 8 );        //会不会是在这个地方有问题,先前提示Program received signal SIGSEGV, Segmentation fault, 而SIGSEGV意味着指针所对应的地址是无效地址,没有物理内存对应该地址

         for(i=0;i<lenData;i+=8 )  {
                 MY_encrypt(pInData+i, pOutData+i, keybuf, DES_DECRYPT);  
        }
        return TRUE
}


MY_encrypt原型是这样的
void MY_encrypt(unsigned char * input, unsigned char * output, unsigned char * des_key, int encrypt)

void MY_encrypt这个结构跟踪是没问题的
非常感谢你的回答

论坛徽章:
0
25 [报告]
发表于 2011-07-11 23:32 |只看该作者
用我们老大的话来说,必现的问题还不好解决吗?不行就是加printf也要把它搞出来

论坛徽章:
13
巨蟹座
日期:2013-10-30 18:29:4115-16赛季CBA联赛之青岛
日期:2019-01-04 17:30:1015-16赛季CBA联赛之天津
日期:2016-03-08 10:30:1715-16赛季CBA联赛之天津
日期:2015-12-10 15:56:452015年亚洲杯之约旦
日期:2015-03-09 16:29:36双鱼座
日期:2014-11-27 17:17:20寅虎
日期:2014-11-18 13:55:12双子座
日期:2014-03-31 15:41:32狮子座
日期:2014-03-14 11:23:24狮子座
日期:2014-02-19 16:30:12午马
日期:2013-11-04 23:22:31卯兔
日期:2013-10-30 19:51:15
26 [报告]
发表于 2011-07-12 10:35 |只看该作者
回复 25# sparkzh


    大哥我目前还是菜鸟, 这个在32位没问题,但在64位有问题! printf能锁定哪个位置,怎么修改又是一个问题

论坛徽章:
0
27 [报告]
发表于 2011-07-12 10:50 |只看该作者
回复 26# ckf513728912


    指针的运行时错误一般贴代码也很难看出来,天晓得指针指哪儿去了
试试分析core文件

论坛徽章:
0
28 [报告]
发表于 2011-07-13 09:22 |只看该作者
首先,出现段错误,不一定就是在你单步运行时,跳出段错误信息时所在代码出现了段错误。而且从你提供的信息来看,应该不是那地方出现了错误。

另外,欲找到问题原因,你最好能提供一下你的编译选项,这有时是很重要的。
再次,你可生成core dump信息,通过coredump找到段错误点。
还有一条,你在调试时,比如单步调试Decrypt函数时,怀疑是memcpy时出现段错误,但从代码来看,似乎又没有错误,这时就应该想到可能是其它线程出现了段错误。这时可能GDB的如下命令来确认是否是这里发生段错误。

.线程调度锁
在调试多线程程序时,有时不希望gdb因为其它线程遇到某个断点或接受到某个信号,而打断了当前线程的调试;或根本就不期望其它线程运行。
这时可打开线程调度锁,从而禁止线程切换的发生。缺省情况下,gdb调试程序时是关闭线程调度锁的。
(1) set scheduler-locking on/off: 打开/关闭线程调度锁
(2) show scheduler-locking: 查看当前线程调度锁的设置状态


相信通过上面提供的信息,你绝对能快速找到出错点。

论坛徽章:
0
29 [报告]
发表于 2011-07-13 09:31 |只看该作者
你的程序在32位系统下没有段错语,在64位下出现问题,那么,在两个不同环境下,使用的编译选项是否一样呢?在64位系统下,你编出的程序是32位的还是64位的呢?
你的编译选项很重要。如果是64位的程序,那么,你将也许还有很多工作需要做,你需要重新检查你的64程序在64位系统下是否能正确运行。
另外需要注意的一点是,你得确认,你程序的每个文件都是编成64的,你链接的库也是64位的,否则将出现很多莫名其妙的问题 。

论坛徽章:
13
巨蟹座
日期:2013-10-30 18:29:4115-16赛季CBA联赛之青岛
日期:2019-01-04 17:30:1015-16赛季CBA联赛之天津
日期:2016-03-08 10:30:1715-16赛季CBA联赛之天津
日期:2015-12-10 15:56:452015年亚洲杯之约旦
日期:2015-03-09 16:29:36双鱼座
日期:2014-11-27 17:17:20寅虎
日期:2014-11-18 13:55:12双子座
日期:2014-03-31 15:41:32狮子座
日期:2014-03-14 11:23:24狮子座
日期:2014-02-19 16:30:12午马
日期:2013-11-04 23:22:31卯兔
日期:2013-10-30 19:51:15
30 [报告]
发表于 2011-07-14 11:41 |只看该作者
本帖最后由 ckf513728912 于 2011-07-14 11:53 编辑

回复 28# qqrilxk


    如果能用gdb当然好,我这套代码包含应用层和底层,不好调试,从应用层这我提供的代码以经过4层模块调用,如果用insight调试看到的是汇编,目前汇编不行啊! 非常非常感谢您的回答
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP