免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2185 | 回复: 2

[C] 函数体内的指针变量为什么突然变为NULL了? [复制链接]

论坛徽章:
0
发表于 2013-07-18 18:03 |显示全部楼层
  1. 2013年7月18日 17:56:25     晴

  2. CWBool CWParseConfigureRequestMessage(char *msg,
  3.                                       int len,
  4.                                       int *seqNumPtr,
  5.                                       CWProtocolConfigureRequestValues *valuesPtr,
  6.                                       char *tmp_RadioInformationABGN,
  7.                                       char *tmp_SuppRates,
  8.                                       char *[color=Red]tmp_MultiDomCapa[/color]) {

  9.                                 if([color=Red]tmp_MultiDomCapa[/color])
  10.                                         lprint("tmp_MultiDomCapa is no null!\n");
  11.                                 else
  12.                                         lprint("tmp_MultiDomCapa is null!\n");

  13.         CWControlHeaderValues controlVal;
  14.         int i,j;
  15.         int offsetTillMessages;

  16.         CWProtocolMessage completeMsg;

  17.         if(msg == NULL || seqNumPtr == NULL || valuesPtr == NULL)
  18.                 return CWErrorRaise(CW_ERROR_WRONG_ARG, NULL);

  19.         CWDebugLog("Parsing Configure Request...");

  20.         completeMsg.msg = msg;
  21.         completeMsg.offset = 0;

  22.         if(!(CWParseControlHeader(&completeMsg, &controlVal)))
  23.                 /* will be handled by the caller */
  24.                 return CW_FALSE;

  25.         /* different type */
  26.         if(controlVal.messageTypeValue != CW_MSG_TYPE_VALUE_CONFIGURE_REQUEST)
  27.                 return CWErrorRaise(CW_ERROR_INVALID_FORMAT, "Message is not Configure Request (maybe it is Image Data Request)");

  28.         *seqNumPtr = controlVal.seqNum;
  29.         /* skip timestamp */
  30.         controlVal.msgElemsLen -= CW_CONTROL_HEADER_OFFSET_FOR_MSG_ELEMS;

  31.         offsetTillMessages = completeMsg.offset;

  32.         /* valuesPtr->WTPRadioInfo.radiosCount=0; */
  33.         valuesPtr->ACinWTP.count=0;
  34.         valuesPtr->radioAdminInfoCount=0;
  35.      /* parse message elements */
  36.         while((completeMsg.offset-offsetTillMessages) < controlVal.msgElemsLen) {

  37.                 unsigned short int elemType = 0;/* = CWProtocolRetrieve32(&completeMsg); */
  38.                 unsigned short int elemLen = 0; /* = CWProtocolRetrieve16(&completeMsg); */

  39.                 CWParseFormatMsgElem(&completeMsg,&elemType,&elemLen);

  40.                 /*CWDebugLog("Parsing Message Element: %u, elemLen: %u", elemType, elemLen);*/

  41.                 switch(elemType) {
  42.                         case CW_MSG_ELEMENT_AC_NAME_CW_TYPE:
  43.                                 if(!(CWParseACName(&completeMsg, elemLen, &(valuesPtr->ACName))))
  44.                                         /* will be handled by the caller */
  45.                                         return CW_FALSE;
  46.                                 break;
  47.                         case CW_MSG_ELEMENT_AC_NAME_INDEX_CW_TYPE:
  48.                                 /* just count how many radios we have,
  49.                                  * so we can allocate the array
  50.                                  */
  51.                                 valuesPtr->ACinWTP.count++;
  52.                                 completeMsg.offset += elemLen;
  53.                                 break;
  54.                         case CW_MSG_ELEMENT_RADIO_ADMIN_STATE_CW_TYPE:
  55.                                 /* just count how many radios we have,
  56.                                  * so we can allocate the array
  57.                                  */
  58.                                 (valuesPtr->radioAdminInfoCount)++;
  59.                                 completeMsg.offset += elemLen;
  60.                                 break;
  61.                         case CW_MSG_ELEMENT_STATISTICS_TIMER_CW_TYPE:
  62.                                 if(!(CWParseWTPStatisticsTimer(&completeMsg, elemLen, &(valuesPtr->StatisticsTimer))))
  63.                                         /* will be handled by the caller */
  64.                                         return CW_FALSE;
  65.                                 break;
  66.                         case CW_MSG_ELEMENT_WTP_REBOOT_STATISTICS_CW_TYPE:
  67.                                 CW_CREATE_OBJECT_ERR(valuesPtr->WTPRebootStatistics,
  68.                                                      WTPRebootStatisticsInfo,
  69.                                                      return CWErrorRaise(CW_ERROR_OUT_OF_MEMORY, NULL););
  70.                                 if(!(CWParseWTPRebootStatistics(&completeMsg,
  71.                                                                 elemLen,
  72.                                                                 valuesPtr->WTPRebootStatistics)))
  73.                                         /* will be handled by the caller */
  74.                                         return CW_FALSE;
  75.      break;

  76.                         case CW_MSG_ELEMENT_IEEE80211_WTP_RADIO_INFORMATION_CW_TYPE:
  77.                                 if(!(CWParseWTPRadioInformation(&completeMsg, elemLen,(unsigned char *) &tmp_RadioInformationABGN)))return CW_FALSE;
  78.                                 break;

  79.                         case CW_MSG_ELEMENT_IEEE80211_MULTI_DOMAIN_CAPABILITY_CW_TYPE:
  80.                                 if([color=Red]tmp_MultiDomCapa[/color])
  81.                                         lprint("tmp_MultiDomCapa is no null!\n");
  82.                                 else
  83.                                         lprint("tmp_MultiDomCapa is null!\n");
  84.                                 if(!(CWParseWTPMultiDomainCapability(&completeMsg, elemLen, (char *)&tmp_MultiDomCapa)))return CW_FALSE;
  85.                                 break;

  86.                         case CW_MSG_ELEMENT_IEEE80211_SUPPORTED_RATES_CW_TYPE:
  87.                                 if(!(CWParseWTPSupportedRates(&completeMsg, elemLen, (unsigned char *)&tmp_SuppRates)))return CW_FALSE;
  88.                                 break;

  89.                         default:
  90.                                 return CWErrorRaise(CW_ERROR_INVALID_FORMAT, "Unrecognized Message Element");
  91.                 }
  92.         }
复制代码

论坛徽章:
0
发表于 2013-07-18 18:05 |显示全部楼层
[130]___[ACConfigureState.c       ]___[CWParseConfigureRequestMessage          ]___tmp_MultiDomCapa is no null!
[220]___[ACConfigureState.c       ]___[CWParseConfigureRequestMessage          ]___tmp_MultiDomCapa is null!
[758]___[ACProtocol.c             ]___[CWParseWTPMultiDomainCapability         ]___msgptr is no null+++++++++++++++++++++++++++++++
[762]___[ACProtocol.c             ]___[CWParseWTPMultiDomainCapability         ]___valptr is no null-------------------------------
这是我打印的内容,为什么tmp_MultiDomCapa,突然就变为NULL了呢?

论坛徽章:
0
发表于 2013-07-19 17:43 |显示全部楼层
在搞无线协议解析?指针是作为参数传进来的,估计是没有做好线程同步,其它线程改变了其值
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP