老马失前蹄,阴沟里翻船了
哈哈,记录下逗比的事。
段错误代码:
/* 消息结构体 */
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;
}
老马失前蹄,阴沟里翻船了相关推荐
- 阴沟里翻船,我将11月2日定为每年的受耻日!
前几天SQL注入的问题,第二天就赶紧做了一个紧急修补,不过全面检查还没做,今天发现有人在网站上留言,说暴了我们的库(其实就暴了一个遗弃的表),并列出得到的一些数据,直指我本人,说本人技术超烂等等的话. ...
- JavaScript阴沟里翻船之运算符优先级
首先欢迎大家关注我的Github博客,也算是对我的一点鼓励,毕竟写东西没法变现,坚持下去也是靠的是自己的热情和大家的鼓励.各位读者的Star是激励我前进的动力,请不要吝惜. 起源 写了两年的 ...
- 【转】阴沟里翻船之KeSetEvent
原帖:阴沟里翻船之KeSetEvent KeSetEvent是个使用频率很高的内核支持函数,但经常使用未必意味着确实了解它.上周就曾遇到一件怪事,系统线程在调用KeSetEvent后线程IRQL竟然从 ...
- [codeforces 1304A] Cow and Haybales 阴沟里翻船
Codeforces Round #621 (Div. 1 + Div. 2) [codeforces 1304A] Cow and Haybales 阴沟里翻船 总目录详见https://blo ...
- 阴沟里翻船——学霸的迷宫
问题描述 学霸抢走了大家的作业,班长为了帮同学们找回作业,决定去找学霸决斗.但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维 的格子迷宫,要进城堡必须得先通过迷宫.因为班长还有妹子要陪,磨刀 ...
- 阴沟里翻船之KeSetEvent
阴沟里翻船之KeSetEvent KeSetEvent是个使用频率很高的内核支持函数,但经常使用未必意味着确实了解它.上周就曾遇到一件怪事,系统线程在调用KeSetEvent后线程IRQL竟然从PAS ...
- java代码编写出现的陷阱-2:阴沟里翻船
(1) 警惕自增的陷阱 java一元运算符有++,--, i++表示先赋值后加1,++i表示先加1后赋值,--同理,但是如果遇到以下代码,你恐怕是阴沟里翻船,不多说,看代码: public stati ...
- 做开发,越老,越容易阴沟里翻船,我们每天都在经历这些事情
做了这么多年开发,期间出过数不尽的bug,发现往往最难解决的问题都是小问题. 小阴沟翻车这么多年不止一次,凌晨2点回到家也在想这些问题,晚上做梦还在想,睡不着.很多的时候心里也知道是小问题,但是始终解 ...
- 一道肤浅、奇葩、却又常常让人阴沟里翻船的面试题
导读 作者:杨漆 16年关系型数据库管理,从oracle 9i .10g.11g.12c到Mysql5.5.5.6.5.7.8.0 到TiDB获得3个OCP.2个OCM:运维路上不平坦,跌过不少坑.熬 ...
最新文章
- python之获取目录下的文件名
- 【联邦学习】FATE 集群部署 step3
- shanghai international trade center
- Java 并发实践 — ConcurrentHashMap 与 CAS
- Android去掉listView,gridView等系统自带阴影
- 架构之重构的12条军规
- TensorFlow工作笔记001---Centos7.3下安装TensorFlow最新版本,基于python2.7.5的,没有编译TensorFlow的源码
- 必 备 习 题 集 (五)
- 递归的Fibonacci在数羊
- delphi mysql 8.0_Delphi 8免费版
- hp170x打印服务器修改ip,HP_JetDirect_170X配置说明
- 基于全基因组的基因家族分析的初尝试
- 【无标mysql触发器trigger实例详解
- Watering Grass UVA - 10382 贪心
- 入侵你Linux服务器的一万种玩法...
- 概念图(Conceptual graph)
- Automation 360 新版AA
- Amesim(一):amesim简介
- JDK8Stream API
- 确保您的Office文档安全
热门文章
- 可以替代百度统计工具Matomo,小睿部署实战!看完你也会了哦!
- 基于Java的酒店管理系统毕业论文
- 基于 AVOS Cloud 的 Android 应用程序快速开发简介
- 使用javascript-obfuscator进行JS的(批量)最小化和混淆
- html可以用搜狗浏览器打开网页,win8使用搜狗浏览器打开网页“显示WEB浏览器已对此页面进行了修改以帮助跨站脚本”怎么办...
- 使用RKE部署Rancher v2.5.8 HA高可用集群
- K-Lite Codec Pack.rar万能播放器
- 物联网技术部第六次培训----网页制作入门HTML
- 如何在Windows系统下多开微信
- 当年给某高校恶意代码研究组的一封公开信[2003年]