哈哈,记录下逗比的事。

段错误代码:

/* 消息结构体 */
typedef struct _message_
{uint headSign;                                     // 消息标识头uint type;                                          // 消息类型uint len;                                            // 消息内容长度char* data;
} MESSAGE_T, *MESSAGE_PT;int SSend::send_msg(char* buf, int len, int type)
{int msglen = len;if (buf && len < 0){printf("buf not null,but len less than 0\n");return -1;}if (!buf){msglen = 0;}MESSAGE_T* msg = (MESSAGE_T*)calloc(1, sizeof(MESSAGE_T) + msglen);msg->headSign = DEFAULT_HEAD_SIGN;msg->type = type;msg->len = msglen;if (msglen > 0){memcpy(msg->data, buf, msglen);}m_client->sendDataByTcp(m_sessionid, (char*)msg, 3*sizeof(unsigned) + msglen);free (msg);msg = NULL;return 0;
}

定睛一看:发现这个这个bug这MESSAGE_T里面的char* data是个指针,用错了。data不是这个结构体的结束处的指针。是一个野指针。

正确做法:

/* 消息结构体 */
typedef struct _message_
{uint headSign;                                     // 消息标识头uint type;                                          // 消息类型uint len;                                            // 消息内容长度char data[1];
} MESSAGE_T, *MESSAGE_PT;
int SSend::send_msg(char* buf, int len, int type)
{int msglen = len;if (buf && len < 0){printf("buf not null,but len less than 0\n");return -1;}if (!buf){msglen = 0;}MESSAGE_T* msg = (MESSAGE_T*)calloc(1, sizeof(MESSAGE_T) + msglen);msg->headSign = DEFAULT_HEAD_SIGN;msg->type = type;msg->len = msglen;if (msglen > 0){memcpy(msg->data, buf, msglen);}m_client->sendDataByTcp(m_sessionid, (char*)msg, 3*sizeof(unsigned) + msglen);free (msg);msg = NULL;return 0;
}

老马失前蹄,阴沟里翻船了相关推荐

  1. 阴沟里翻船,我将11月2日定为每年的受耻日!

    前几天SQL注入的问题,第二天就赶紧做了一个紧急修补,不过全面检查还没做,今天发现有人在网站上留言,说暴了我们的库(其实就暴了一个遗弃的表),并列出得到的一些数据,直指我本人,说本人技术超烂等等的话. ...

  2. JavaScript阴沟里翻船之运算符优先级

     首先欢迎大家关注我的Github博客,也算是对我的一点鼓励,毕竟写东西没法变现,坚持下去也是靠的是自己的热情和大家的鼓励.各位读者的Star是激励我前进的动力,请不要吝惜.   起源   写了两年的 ...

  3. 【转】阴沟里翻船之KeSetEvent

    原帖:阴沟里翻船之KeSetEvent KeSetEvent是个使用频率很高的内核支持函数,但经常使用未必意味着确实了解它.上周就曾遇到一件怪事,系统线程在调用KeSetEvent后线程IRQL竟然从 ...

  4. [codeforces 1304A] Cow and Haybales 阴沟里翻船

    Codeforces Round #621 (Div. 1 + Div. 2) [codeforces 1304A] Cow and Haybales   阴沟里翻船 总目录详见https://blo ...

  5. 阴沟里翻船——学霸的迷宫

    问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维 的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀 ...

  6. 阴沟里翻船之KeSetEvent

    阴沟里翻船之KeSetEvent KeSetEvent是个使用频率很高的内核支持函数,但经常使用未必意味着确实了解它.上周就曾遇到一件怪事,系统线程在调用KeSetEvent后线程IRQL竟然从PAS ...

  7. java代码编写出现的陷阱-2:阴沟里翻船

    (1) 警惕自增的陷阱 java一元运算符有++,--, i++表示先赋值后加1,++i表示先加1后赋值,--同理,但是如果遇到以下代码,你恐怕是阴沟里翻船,不多说,看代码: public stati ...

  8. 做开发,越老,越容易阴沟里翻船,我们每天都在经历这些事情

    做了这么多年开发,期间出过数不尽的bug,发现往往最难解决的问题都是小问题. 小阴沟翻车这么多年不止一次,凌晨2点回到家也在想这些问题,晚上做梦还在想,睡不着.很多的时候心里也知道是小问题,但是始终解 ...

  9. 一道肤浅、奇葩、却又常常让人阴沟里翻船的面试题

    导读 作者:杨漆 16年关系型数据库管理,从oracle 9i .10g.11g.12c到Mysql5.5.5.6.5.7.8.0 到TiDB获得3个OCP.2个OCM:运维路上不平坦,跌过不少坑.熬 ...

最新文章

  1. python之获取目录下的文件名
  2. 【联邦学习】FATE 集群部署 step3
  3. shanghai international trade center
  4. Java 并发实践 — ConcurrentHashMap 与 CAS
  5. Android去掉listView,gridView等系统自带阴影
  6. 架构之重构的12条军规
  7. TensorFlow工作笔记001---Centos7.3下安装TensorFlow最新版本,基于python2.7.5的,没有编译TensorFlow的源码
  8. 必 备 习 题 集 (五)
  9. 递归的Fibonacci在数羊
  10. delphi mysql 8.0_Delphi 8免费版
  11. hp170x打印服务器修改ip,HP_JetDirect_170X配置说明
  12. 基于全基因组的基因家族分析的初尝试
  13. 【无标mysql触发器trigger实例详解
  14. Watering Grass UVA - 10382 贪心
  15. 入侵你Linux服务器的一万种玩法...
  16. 概念图(Conceptual graph)
  17. Automation 360 新版AA
  18. Amesim(一):amesim简介
  19. JDK8Stream API
  20. 确保您的Office文档安全

热门文章

  1. 可以替代百度统计工具Matomo,小睿部署实战!看完你也会了哦!
  2. 基于Java的酒店管理系统毕业论文
  3. 基于 AVOS Cloud 的 Android 应用程序快速开发简介
  4. 使用javascript-obfuscator进行JS的(批量)最小化和混淆
  5. html可以用搜狗浏览器打开网页,win8使用搜狗浏览器打开网页“显示WEB浏览器已对此页面进行了修改以帮助跨站脚本”怎么办...
  6. 使用RKE部署Rancher v2.5.8 HA高可用集群
  7. K-Lite Codec Pack.rar万能播放器
  8. 物联网技术部第六次培训----网页制作入门HTML
  9. 如何在Windows系统下多开微信
  10. 当年给某高校恶意代码研究组的一封公开信[2003年]