socket编程时,使用memcpy发生了一个很奇怪的段错误

ENDLESS.c 2019-05-29 02:38:28
如下图,(用手机不方便打,办公电脑又没网,只能用图片,您见谅) 当使用主机字节序与网络字节序之间相互转换的时候,memcpy这个函数不管在哪都会段错误,即使在代码开头 解决方法也很简单,把accept这一段代码封装到另一个C文件中就可解决,但实在不明白为什么会段错误?
...全文
426 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Yofoo 2019-05-30
  • 打赏
  • 举报
回复
越界是肯定的, 但是越界后是否出错要看实际情况 越界 是指访问 "this is server!" 这个 如果这个数据刚好放到一个内存区的末端, 越界到另外一段内存就可能会报错 实际情况可以直接调试看异常位置, 也可以用工具去查看exe, 看数据的位置
jiamianshiye 2019-05-29
  • 打赏
  • 举报
回复
那你只能贴gdb的bt full信息了。
ENDLESS.c 2019-05-29
  • 打赏
  • 举报
回复
引用 6 楼 jiamianshiye_16_com 的回复:
返回值和ip地址一样,头文件也是有的
jiamianshiye 2019-05-29
  • 打赏
  • 举报
回复

inet_ntop()
你关注下这个函数的返回值,与ip, 的地址是否相符合,如果不符合,很 有可能是64位系统的问题。 #include <arpa/inet.h> 如果是64位系统,加上这个头文件。
ENDLESS.c 2019-05-29
  • 打赏
  • 举报
回复
1,把memcpy换成strcpy是没有问题的 2,把sizeof(buf)换成552没有问题,换成553就段错误 看来不仅仅是长度超了的问题,毕竟把ntohs和inet_ntop两行注释掉也没有问题 这里面看来还是很复杂的~
自信男孩 2019-05-29
  • 打赏
  • 举报
回复
引用 3 楼 jiamianshiye_16_com 的回复:
我觉得问题不在于越界。memcpy只是个复制内存函数,没有超出buf的范围,这个并没有问题,只是用法很奇怪,字符串赋值不是应该用strcpy么。

但是这个段错误,应该用gdb来调试,然后你把 bt full 的信息都贴出来,这样比较好定位问题。

拷贝长度是1024,第二个参数其实是一个地址,那么拷贝的个数就是从这个地址开始的1024个字节,那么不就越界了吗?
jiamianshiye 2019-05-29
  • 打赏
  • 举报
回复
我觉得问题不在于越界。memcpy只是个复制内存函数,没有超出buf的范围,这个并没有问题,只是用法很奇怪,字符串赋值不是应该用strcpy么。 但是这个段错误,应该用gdb来调试,然后你把 bt full 的信息都贴出来,这样比较好定位问题。
自信男孩 2019-05-29
  • 打赏
  • 举报
回复
越界了 ,这个字符串的长度也只有不到20个字符,但是你要拷贝1024个字符到buf里,因此很明显越界了。
建议改成:
memcpy(buf, "xxx", strlen("xxx") + 1);
AlbertS 2019-05-29
  • 打赏
  • 举报
回复

memcpy(buf, "this is server!", sizeof(buf));
//这句操作内存越界了啊, "this is server!"这个字符串没有1024这么长,
//直接写成 char buf[1024] = "this is server!";就行了
内容概要:本研究针对微电网在遭受拒绝服务(DoS)攻击面临的功率分配不均与电能质量问题,提出了一种兼顾功率精确均分与电压频率质量恢复的抗攻击混合动态事件触发二次控制策略。该策略通过设计新型混合动态事件触发机制,有效减少控制器与分布式单元间的网络通信负担,同增强系统对DoS攻击的鲁棒性。研究构建了完整的微电网二次控制框架,整合了分布式协同控制算法与事件触发通信机制,在保证系统稳定性的同,实现了对频率、电压偏差的快速调节和有功/无功功率的精确分配。通过Simulink平台进行仿真实验,验证了所提方法在遭受DoS攻击及正常运行工况下均能有效维持微电网的稳定运行与高质量电能输出。; 适合人群:具备电力系统自动化、分布式控制或微电网相关基础知识,从事新能源、智能电网领域研究的研发人员及高年级研究生。; 使用场景及目标:① 解决微电网在通信受限及网络攻击场景下的协同控制难题;② 实现微电网在异常工况下功率均分与电能质量的双重优化;③ 为设计高安全性、高可靠性的智能微电网控制系统提供理论依据与仿真验证方案。; 阅读建议:本资源侧重于控制策略的设计与仿真验证,建议读者结合微电网基础理论与Simulink仿真技术,深入理解事件触发机制与抗DoS攻击控制算法的实现细节,并动手复现仿真案例以加深对系统动态性能与鲁棒性的认识。

70,038

社区成员

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

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