memcpy出错core掉?

john_345 2008-03-07 01:15:28
使用gdb调试代码的时候发现memcpy的地方出错了,一开始以为是指针null,但是后来检查了,不是,但一直会core,求高手帮忙。


char des[4096];
char *src;

//...., 很多代码省略

// 判断是不是null, 运行的时候没有输出
if (des == NULL)
printf("des = NULL!\n");

if (src == NULL)
printf("src = NULL!\n");

memcpy(des, src, sizeof(des));
...全文
640 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
john_345 2008-03-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 brookmill 的回复:]
指针不是null,不代表这个指针就没问题,它有可能指到了某些危险的地方。
这种野指针比null指针更麻烦,因为null比较容易发现。
最好把有关src的代码都贴出来
[/Quote]
非野指针.
john_345 2008-03-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 Chiyer 的回复:]
是不是由空间重叠了,改用memmove 看看
[/Quote]
验证过了,不是这个问题.
john_345 2008-03-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 abupie 的回复:]
我觉得应该是内存越界了,楼主检查下src的长度。

这样写看看:

C/C++ code
// 假设src的长度是srclen
memcpy(des, src, sizeof(des) < srclen ? sizeof(des) : srclen);




memcpy的第3个参数是长度,一般要用src和des的最小长度,否则会内存越界碰到不可操作的内存导致程序core. 这种问题不容易发现。
[/Quote]
谢谢,就是这个问题.
Treazy 2008-03-07
  • 打赏
  • 举报
回复
内存很可能越界访问了!
Supper_Jerry 2008-03-07
  • 打赏
  • 举报
回复
在memcpy(des, src, sizeof(des));之前,输出一下src看看
brookmill 2008-03-07
  • 打赏
  • 举报
回复
为了减少一点野指针的危险,最好在定义指针的时候顺便赋值为null;delete或者free之后也马上赋值为null
char *src = NULL;
brookmill 2008-03-07
  • 打赏
  • 举报
回复
指针不是null,不代表这个指针就没问题,它有可能指到了某些危险的地方。
这种野指针比null指针更麻烦,因为null比较容易发现。
最好把有关src的代码都贴出来
星羽 2008-03-07
  • 打赏
  • 举报
回复
是不是由空间重叠了,改用memmove 看看
abupie 2008-03-07
  • 打赏
  • 举报
回复
我觉得应该是内存越界了,楼主检查下src的长度。

这样写看看:

// 假设src的长度是srclen
memcpy(des, src, sizeof(des) < srclen ? sizeof(des) : srclen);


memcpy的第3个参数是长度,一般要用src和des的最小长度,否则会内存越界碰到不可操作的内存导致程序core. 这种问题不容易发现。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧