该死的While循环
本文将列举一个使用While循环导致死循环的实例。
但凡看过一点通讯协议的人对以下的数据结构应该不会陌生:
+-----------------+
| tag_1 |
+-----------------+
| len_1 |
+---+-------------+
| c | tag_1.1 |
+ +-------------+
| o | len_1.1 |
+ +-------------+
| n | content_1.1|
+ +-------------+
| t | tag_1.2 |
+ +-------------+
| e | len_1.2 |
+ +-------------+
| n | content_1.2|
+ +-------------+
| t | ...... |
+ +-------------+
| 1 | ...... |
+---+-------------+
具体举例如下:
该数据结构在某协议的定义里面是这样的。
TAG 是 1个字节,从0~0xFF,表明某数据的类型
LEN 是 1个字节,表明该数据的总长度(包括TAG+LEN+CONTENT)
CONTENT 数据内容的长度根据LEN来确定。
其中某种TAG的内容字段,可能是包涵其他N个TAG及其内容。(N值一般没有显式定义)
对照这个图我们可以看到:
TAG1 就包涵有TAG1.1、TAG1.2 ...
那么我们程序一般会怎么写呢?
为使程序简单,我们先做一些假设:
1、TAG1已解码
2、TAG1的长度等于usLen<

本文探讨了一种由于While循环导致的通讯协议解析死循环问题。在VxWorks操作系统环境下,解析包含递归TAG的数据结构时,程序可能会陷入错误的循环。文中介绍了该数据结构的组成,并假设了某些条件,如TAG和LEN已知,内容存储在特定缓冲区。然而,这样的编程方式可能导致意料之外的行为,暗示了潜在的编程错误。下文将揭示这些错误并提出解决方案。
最低0.47元/天 解锁文章
1795

被折叠的 条评论
为什么被折叠?



