散分

wang_qiao_ying 2010-05-15 12:49:34
9、g_pstHead指向一个单项链表(无哑节点)的头,定时器处理函数CROSS_Timer会定时调用,随机删除其中的一个节点,并提供了一个函数Node_Print用来打印节点相关信息。请找出程序中Node_Print函数的错误(不包括编程规范错误)(12分)
1 typedef struct DATA_NODE
2 {
3 CHAR *pcData;/*用于存储usLen个字节的图像文件数据*/
4 USHORT usLen;/*usLen == 0时, pcData为NULL*/
5 CHAR szName[30];/*字符串*/
6 }DATA_NODE_S;
7
8 typedef struct NODE
9 {
10 struct NODE *pstNext;
11 DATA_NODE_S *pstDataNode;
12 }NODE_S;
13
14 NODE_S *g_pstHead = NULL; /* 指向链表的头。系统起来后,已经调用相关函数对这个链表进行了初始化*/
15
16 #define N 10 /* 链表的最大长度 */
17
18
19 void Node_Print(NODE_S *pstNode)
20 {
21 CHAR *pcStr;
22 NODE_S *pstNode;
23 DATA_NODE_S *pstData;
24
25 pcStr = (CHAR *)malloc(sizeof(DATA_NODE_S));
26
27 for (pstNode = g_pstHead; pstNode != NULL; pstNode = pstNode->pstNext)
28 {
29 pstData = pstNode->pstDataNode;
30
31 sprintf(pcStr, "\r\nname : %s data : %s",
32 pstData->szName, pstData->pcData);
33 printf("%s", pcStr);
34 }
35 return;
36
37 }

答案:(注:该题目中隐藏错误比较多,只要指出6个错误即可)
<1> 25行:没有判断内存申请是否成功
<2> Node_Print中pcStr没有释放
<3> 29行:pstData是否为NULL没有判断
<4> 31行:pcStr申请的空间可能不足,导致越界
<5> 32行:pstData->pcData是否为NULL没有判断
<6> 31行:pstData->pcData不是字符串
<7> 参数和局部变量重名,指出也算
<8> 说明了对连表遍历过程中的保护问题也算
<9> 申请完内存没有初始化算错
<10> pData成员没有申请内存
...全文
49 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
悟迟 2010-05-15
  • 打赏
  • 举报
回复
王跃文评兽兽:不要脸的时代 臭的自然会成香
嗷嗷叫的老马 2010-05-15
  • 打赏
  • 举报
回复
啥情况??
toury 2010-05-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wozhaolala 的回复:]

王跃文评兽兽:不要脸的时代 臭的自然会成香
[/Quote]
严重顶起~

742

社区成员

发帖
与我相关
我的任务
社区描述
VB 版八卦、闲侃,联络感情地盘,禁广告帖、作业帖
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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